• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    利用VB實(shí)現(xiàn)系統(tǒng)托盤技術(shù)

    2017-04-13 05:43:17趙汝苓
    中國(guó)新通信 2017年5期

    趙汝苓

    【摘要】 通過(guò)調(diào)用API函數(shù)實(shí)現(xiàn)系統(tǒng)托盤技術(shù),主要涉及到API的幾個(gè)常用函數(shù)的聲明和調(diào)用,再結(jié)合VB本身的特征綜合運(yùn)用。

    【關(guān)鍵詞】 API 系統(tǒng)托盤 消息機(jī)制

    系統(tǒng)托盤常指Windows任務(wù)欄的狀態(tài)區(qū)域,系統(tǒng)時(shí)鐘、音量控制等程序都在系統(tǒng)托盤中,一些應(yīng)用程序在安裝完后也將它們本身的圖標(biāo)放入了其中。一般來(lái)說(shuō),系統(tǒng)托盤駐留程序是在計(jì)算機(jī)后臺(tái)運(yùn)行,如瑞星、MSN等。系統(tǒng)托盤主要以特殊的小圖標(biāo)在任務(wù)欄右邊時(shí)間的區(qū)域出現(xiàn),作為程序運(yùn)行的一個(gè)標(biāo)志,我們可以通過(guò)使用小圖標(biāo)所彈出的菜單來(lái)控制應(yīng)用程序狀態(tài),可實(shí)現(xiàn)修改該圖標(biāo)、窗口復(fù)位、最大化、最小化及關(guān)閉程序等功能。

    利用VB調(diào)用API可以實(shí)現(xiàn)功能比較完整的托盤程序,牽涉到Shell_NotifyIcon、SendMassage、CallWindowProc、SetWindowLong等API函數(shù),其中Shell_NotifyIcon是主要的函數(shù),它用來(lái)添加、刪除、更改系統(tǒng)托盤區(qū)的圖標(biāo),SendMassage、CallWindowProc、SetWindowLong函數(shù),通過(guò)WINDOWS操作系統(tǒng)的消息機(jī)制,實(shí)現(xiàn)對(duì)應(yīng)用程序的控制。

    一、先介紹相關(guān)的API函數(shù)、關(guān)鍵字

    1、Shell_NotifyIcon用于添加、刪除、更改系統(tǒng)托盤區(qū)的圖標(biāo);2、SendMassage用于將一條消息發(fā)給某個(gè)窗口;3、CallWindowProc用于發(fā)送消息到一個(gè)窗口過(guò)程;4、SetWindowLong用于使窗口結(jié)構(gòu)中為指定的窗口設(shè)置屬性,SetWindowLong函數(shù)作用是取得默認(rèn)窗口過(guò)程的地址,然后轉(zhuǎn)向自定義的窗口過(guò)程的地址。5、消息機(jī)制。Windows消息控制中心一般是三層結(jié)構(gòu),其頂端就是Windows內(nèi)核。Windows內(nèi)核維護(hù)著一個(gè)消息隊(duì)列,第二季控制中心從這個(gè)消息隊(duì)列中獲取自己管轄的消息,后作出處理,有些消息直接處理掉,有些還要發(fā)送給下一級(jí)窗體或控件。第二級(jí)控制中心一般是各Windows應(yīng)用程序的Application對(duì)象。第三級(jí)控制中心就是Windows窗體對(duì)象,每一個(gè)窗體都有一個(gè)默認(rèn)的窗體過(guò)程,這個(gè)過(guò)程負(fù)責(zé)處理各種接收到的消息。

    二、系統(tǒng)托盤圖標(biāo)屬性設(shè)置

    在使用Shell_NotifyIcon函數(shù)之前,我們應(yīng)先定義結(jié)構(gòu)類型NOTIFYICONDATA,然后定義一個(gè)NOTIFYICONDATA 的變量TheData來(lái)記錄設(shè)置托盤圖標(biāo)的數(shù)據(jù)。

    代碼:

    Public Type NOTIFYICONDATA

    cbSize As Long HWnd As Long

    Uid As Long UFlags As Long

    UCallbackMessage As Long

    HIcon As Long

    SzTip As String*64

    End Type

    Private TheData As NOTIFYCONDATA

    1、設(shè)置添加圖標(biāo)屬性值

    代碼:With TheData

    Uid=0

    .HWnd=frm.HWnd frm.HWnd是程序主窗體的句柄

    .cbSize=Len(TheData)\

    .HIcon=frm.Icon.Handle frm.Icon.Handle指向主窗體的圖標(biāo)

    .UFlags=NIF_ICON

    .UCallbackMessage=TRAY_CALLBACK 作用是允許返回消息

    .UFlags=.UFlags Or NIF_MESSAGE

    .cbSize=Len(TheData)

    End With

    Shell_NotifyIcon NIM_ADD,TheData 根據(jù)前面定義NIM_ADD,設(shè)置為“添加模式”,然后添加。

    2、設(shè)置刪除圖標(biāo)屬性值

    代碼:

    With TheData

    .UFlags=0

    End With

    Shell_NotifyIcon NIM_DELETE,TheData 根據(jù)前面定義NIM_DELETE,設(shè)置為“刪除模式”。

    3、設(shè)置更改圖標(biāo)屬性值

    With TheData

    .HIcon=pic.Handle tip是字符串string,存儲(chǔ)提示信息

    .UFlags=NIF_ICON 指明要對(duì)浮動(dòng)提示進(jìn)行設(shè)置

    End With

    Shell_NotifyIcon NIM_MODIFY,TheData 根據(jù)前面定義NIM_MODIFY,設(shè)置為“更改模式”

    4、設(shè)置為圖標(biāo)添加浮動(dòng)提示信息的屬性值

    代碼:

    With TheData

    .SzTip=tip&vbNullChar tip是字符串string,存儲(chǔ)提示信息

    .UFlags=NIF_TIP 指明要對(duì)浮動(dòng)提示進(jìn)行設(shè)置

    End With

    Shell_NotifyIcon NIM_MODIFY,TheData 根據(jù)前面定義

    NIM_MODIFY,設(shè)置為“修改模式”。

    此時(shí)的托盤圖標(biāo)是孤立的,我們并不能利用它來(lái)控制應(yīng)用程序的行為。

    三、利用消息機(jī)制實(shí)現(xiàn)托盤圖標(biāo)控制

    每個(gè)應(yīng)用程序在運(yùn)行時(shí)都會(huì)被分配一個(gè)窗口過(guò)程WINDOWPROC,由這個(gè)窗口過(guò)程來(lái)接受和處理操作系統(tǒng)發(fā)來(lái)的消息,通常情況下這個(gè)窗口過(guò)程是由操作系統(tǒng)指定的,它會(huì)自動(dòng)的響應(yīng)并處理一些WINDOWS消息。程序中用到了SendMassage、CallWindowProc、SetWindowLong等API函數(shù),其中SendMassage函數(shù)的作用是將一條消息發(fā)給某個(gè)窗口;CallWindowPro函數(shù)用來(lái)發(fā)送消息到一個(gè)窗口過(guò)程;而使用SetWindowLong函數(shù)來(lái)為窗口結(jié)構(gòu)中為指定的窗口設(shè)置屬性。

    1、處理來(lái)自托盤圖標(biāo)的信息。需要編寫代碼來(lái)處理消息,必須先更改窗口的屬性,從原來(lái)有默認(rèn)的窗口過(guò)程處理消息變成由自定義編寫的消息處理過(guò)程來(lái)處理消息。使用SetWindowLong函數(shù)來(lái)取得默認(rèn)窗口過(guò)程的地址,然后轉(zhuǎn)向自定義的窗口過(guò)程的地址。然后,編寫NewWindowProc函數(shù)代碼,需要注意的是TRAY_CALLBACK是由托盤區(qū)圖標(biāo)傳來(lái)的消息,要讓托盤圖標(biāo)傳回消息,必須在添加托盤圖標(biāo)時(shí)指定。

    2、實(shí)現(xiàn)對(duì)圖標(biāo)右鍵菜單的控制。這時(shí)我們需要用到SendMassage函數(shù)來(lái)向主窗體發(fā)送最大化、最小化、關(guān)閉、移動(dòng)等信息,其中HWnd是主窗體的句柄,WM_ SYSCOMMAND表示發(fā)送的是系統(tǒng)控制類的消息,SC_ MOVE、SC_SIZE、SC_RESTORE是要發(fā)送的消息。

    小結(jié):Windows環(huán)境提供有非常豐富的編程接口資源,在這個(gè)基礎(chǔ)上可以編制出能滿足各種目標(biāo)功能的應(yīng)用系統(tǒng)。當(dāng)然必須對(duì)Windows的一種重要運(yùn)行機(jī)制——消息機(jī)制作深入的理解,然后才能運(yùn)用API函數(shù)來(lái)達(dá)到各種要求,系統(tǒng)托盤技術(shù)只是其中的一個(gè)運(yùn)用,在此起到了拋磚引玉的作用。

    參 考 文 獻(xiàn)

    [1]劉新民,蔡瓊編著,《VisualBasic6.0程序設(shè)計(jì)》,清華大學(xué)出版社,2014,3

    [2]肖斌編著,《VisualBasic6.0程序設(shè)計(jì)》,北京希望電子出版社,2012,8

    赞皇县| 加查县| 崇左市| 霍山县| 黄骅市| 泊头市| 丰城市| 信宜市| 错那县| 嵊州市| 峡江县| 鄂伦春自治旗| 砚山县| 白玉县| 凤庆县| 剑阁县| 溧阳市| 峨眉山市| 长治市| 深泽县| 新化县| 琼结县| 阿城市| 金门县| 安阳县| 茶陵县| 汉寿县| 黄石市| 岳阳县| 宣恩县| 桐柏县| 鲁山县| 康定县| 祁阳县| 兴山县| 白城市| 商河县| 临江市| 河东区| 阆中市| 山东省|