• 
    

    
    

      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

      昌黎县| 贵州省| 吉林省| 中卫市| 南澳县| 阿克| 湛江市| 中山市| 凤城市| 鹿泉市| 武宣县| 绥化市| 大庆市| 湄潭县| 博白县| 长兴县| 德安县| 东平县| 江孜县| 枣庄市| 离岛区| 青神县| 商丘市| 克山县| 湖南省| 巴南区| 金昌市| 清镇市| 廊坊市| 密山市| 麟游县| 田阳县| 响水县| 潢川县| 铁力市| 古蔺县| 库车县| 东台市| 河间市| 栾城县| 措美县|