亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        利用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

        日韩精品欧美激情国产一区| 综合亚洲二区三区四区在线| 三级国产精品久久久99| 免费a级毛片无码免费视频120软件| 欧美日韩久久久精品a片| 美女黄频视频免费国产大全| 国产毛片精品av一区二区| 国产精品麻豆va在线播放| 久久久久久久人妻无码中文字幕爆 | 日本高清在线一区二区三区| 亚洲精品无码av中文字幕| 国产aⅴ天堂亚洲国产av| 久久久久久一本大道无码 | 99久久精品久久久| 国产午夜精品视频在线观看| 国产欧美一区二区精品久久久| 青青青国产精品一区二区| 亚洲AV秘 片一区二区三区| 中文字幕亚洲一二三区| 天堂中文官网在线| 日韩A∨精品久久久久| 国产精品不卡在线视频| 国产亚洲精品熟女国产成人 | 国产亚洲日韩欧美一区二区三区| 亚洲精品白浆高清久久| 国产精品精品国产色婷婷| 久久精品人妻无码一区二区三区| 国产91精选在线观看麻豆| 黄片午夜免费观看视频国产| 99噜噜噜在线播放| 天天躁日日躁狠狠躁欧美老妇| 欧美亚洲日本在线| 午夜精品一区二区三区视频免费看| 中文字幕亚洲精品一区二区三区 | 久久一二三四区中文字幕| 一区二区三区四区国产99| 国产伦精品一区二区三区免费 | 亚洲国产av中文字幕| 人妻熟妇乱又伦精品视频| 美女视频黄的全免费的| 日本一区二区三区在线播放|