




免費預覽已結束,剩余1頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
VB的API編程精粹(二) Visual Basic以友好易學的可視化開發(fā)環(huán)境聞名于 世,成為人們學習計算機編程的首選語言。目前,全世界 大概有300多萬人使用著Visual Basic語言。如果您想在 這茫茫眾生中出類拔萃,那么您就不得不學習API (Application Program lnterface,即Windows的應用程 序編程接口)編程。不懂API,那可成不了高手。第一節(jié):API基礎API說到底就是一系列的底層函數(shù),是系統(tǒng)提供給 用戶用于進入操作系統(tǒng)核心,進行高級編程的途徑。通 過在Visual Basic應用程序中聲明外部過程就能夠 訪問Windows API(以及其它的外部DLLs)。在聲明 了過程之后,調(diào)用它的方法與調(diào)用Visual Basic自 己的過程相同。要聲明一個DLL過程,需要在代碼窗 口的聲明部分增加一個Declare語句,如果該過 程返回一個值,應將其聲明為Function。例如:Declare Function publicname Lib libname Alias alias (ByVal variable As type ,ByVal variable As type.) As Type如果過程沒有返回值,可將其聲明為Sub。缺省情況下,在標準模塊中聲明的DLL過程,可 以在應用程序的任何地方調(diào)用它。在其他類型的模塊 中定義的DLL過程是模塊私有的,必須在它們前面 加上Private關鍵字,以示區(qū)分。特別提請注意的 是,在32位的Visual Basic中過程名是區(qū)分大小 寫的。而在以前的16位版本中并不區(qū)分大小寫,這 是初學者容易出錯的地方。Declare語句中的Lib子句用來告訴Visual Basic如何找到包含該過程的dll文件。如果引用的過 程屬于Windows核心庫(User32、Kernel32或 GDI32),則可以不包含文件擴展名。例如:Declare Function GetTickCount Lib kernel32 Alias GetTickCount() As Long。對于其它DLL, Lib子句須指定文件的路徑及擴展名。如果調(diào)用的Windows API過程要使用字符串,那 么在聲明語句中必須增加一個Alias子句,以指定 正確的字符集。包含字符串的Windows API函數(shù)實 際有兩種格武ANSI格式Unicode格式。因此,在 Windows頭文件中,每個包含字符串的函數(shù)都同時有 ANSI版本和Unicode版本。例如,下面是SetWindowText函數(shù)的兩種C語言描 述??梢钥吹剑谝粋€描述將函數(shù)定義為SetWindowTextA, 尾部的A表明它是一個ANSI函數(shù):SetWindowTextA(HWND hWnd,LPCSTR lpString);第二個描述將它定義為SetWindowTextW,尾部的 w表明它是一個Unicode函數(shù):SetWindowTextW(HWND Hwnd,LPCWSTR lpString);因為兩個函數(shù)實際的名稱都不是SetWindow Text,要引用正確的函數(shù)就必須增加一個Alias子句:Private Declare Function SetwindowText Lib user32 Alias SetWindowTextA(ByVal hwnd As Longg,ByVal lpString As String) As Long請注意, Alias子句后面的字符串必須是過程的 真正名稱,必須是區(qū)分大小寫的。事實上,您只需要 記住,只有Windows NT才支持Unicode格式,而 Windows 95只支持ANSI格式就行了。至于兩者的區(qū) 別,作一般的應用程序開發(fā)是不需要了解的。VB5專業(yè)版在VB目錄的Winapi子目錄下,用幾 個文件提供了關于API的信息。 Win32api.txt文件中 包含了32位Windows API函數(shù)中用到的函數(shù)和類型的 結構聲明以及全局常量的值。用戶可以用VB本身帶的外 接程序API瀏覽器來方便地使用Win32apiTxt,如下 所示:點擊菜單文件項的加載文本文件從VB目 錄下的WINAPI目錄中選擇WIN32API.TXT,就可以 查看WINDOWS 95系統(tǒng)的API函數(shù)的聲明、常數(shù)定義和 數(shù)據(jù)類型了。例如,我們打算查看函數(shù)InverRect() 的聲明。首先,點擊搜索按鈕,輸入字符串 InverRect。在可選項欄中,蘭色的亮度條將移 動到InverRect項上。再點按添加按鈕,在選 定項中就出現(xiàn)InverRect在Visual Basic中的 聲明了。接下來自然是點按復制按鈕,然后將窗 口切換到Visual Basic開發(fā)環(huán)境中,在需要聲明API 函數(shù)的地方CtrlV(粘貼)即可。上面所講的聲明方法雖然簡單,但只有使用WIN DOWS本身的API函數(shù)才能這樣。對于第三方提供的動 態(tài)鏈接庫(DLL)您只有用鍵盤老老實實地敲了。第二節(jié):牛刀小試現(xiàn)在讀者一定很想自己親自試一下,下面舉兩個 實際應用的例子讓大家體會一下API的妙用吧!1使一個窗體始終保持在屏幕的最上面我們知道VB本身自帶的函數(shù)是難以完成此功能 的,我們可以通過調(diào)用Windows的API函數(shù): SetWindowPos達到我們的要求。操作步驟如下:(1)啟動VB5建立一個新工程,在該工程中添加一 個模塊(Moudel),在該模塊中用上述的API例覽器 添加如下的該API函數(shù)的函數(shù)聲明和常量聲明部分:API函數(shù)聲明Declare Function SetWindowPos Lib user32 Alias SetWindowPos (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long常量聲明Global Const SWP_HIDEWINDOW = &H80Global Const SWP_NOACTIVATE = &H10Global Const SWP_NOCOPYBITS = &H100Global Const SWP_NOMOVE = &H2Global Const SWP_NOOWNERZORDER = &H200Global Const SWP_NOREDRAW = &H8Global Const SWP_NOREPOSITION = SWP_NOOWNERZORDERGlobal Const SWP_NOSIZE = &H1Global Const SWP_NOZORDER = &H4Global Const SWP_SHOWWINDOW = &H40Global Const HWND_BOTTOM = 1Global Const HWND_BROADCAST = &HFFFF&Global Const HWND_DESKTOP = 0Global Const HWND_NOTOPMOST = -2Global Const HWND_TOPMOST = -1Global Const HWND_TOP = 0Global Const Flags=SWP_NOMOVE Or SWP_NOSIZE這里以SWP_開頭的常量是表示窗體所具有的 風格,這些常量可以通過VB中的OR操作符組合在 一起。而以HWND_開頭的常量表示窗體在桌面上的 位置。從這些常量的英文單詞的意義上讀者應該很容 易理解他們所具有的風格了。所以筆者就不一一去說 明了。至于為什么要添加這些常量而不是別的這就要 您去查看Windows SDK關于該函數(shù)的幫助文檔了。當 然這對于初學者來說有一定的難度,但不要畏懼,只 要您仔細看幫助就會慢慢搞懂的。因為這些API函數(shù) 是為C和C的編程人員編寫的,所以如果您懂一點 C+的話會很容易理解的。(2)現(xiàn)在只要在您想要此功能的地方調(diào)用該函數(shù) 就可以了,調(diào)用的方法如:Dim Success as LongSuccesSSetwindowPos(me.HWnd. HWND_TOPMOST,0,0,0,0,FLAGS)若Success返回的值不等于零則表示調(diào)用成功。比如在某個窗體的Load事件中加入上述的兩行代 碼,就可以達到使該窗體始終位于屏幕最上面的目的。細心的讀者可能已經(jīng)發(fā)現(xiàn)上面的例子中的模塊聲 明中聲明了好幾個常量,可為什么只用到三個呢?現(xiàn) 在您可以試著改變一下API函數(shù)SetWindowPos中 的第二個參數(shù)或常量FLAGS中的項,看看您的窗體會 出現(xiàn)什么樣的效果?2VB5中如何屏蔽掉win95中的CTRL_ALT_DEL, CTRL_ESC, ALT_TAB三組熱鍵通過調(diào)用API函數(shù)SystemParametersInfo來實 現(xiàn)。首先創(chuàng)建一新工程;在此工程中添加一個窗體和 一個模塊;在窗體上拖放兩個按鈕分別命名為 cmdDisable,cmdEnable;Copy如下代碼入模塊中:Public Declare Function SystemParametersInfo Lib user32 Ahias SystemParametersInfoA (ByVal uAction As Long,ByVal uParam As Long, lpvParam As Any,ByVal fuWinIni As Long)AS LongPublic Const SPI_SCREENSAVERRUNNING=97在窗體的代碼編輯區(qū)Copy如下代碼:使三組熱鍵失效Private Sub cmdDisable_click()SystemParametersInfoSPI_SCREENSAVERRUNNING,True,byVal 1&,0End SubPrivate Sub Form_Unload(Cancel As Integer)程序退出前是熱鍵有效CndEnable_ClickEnd Sub若將此功能和屏幕保護程序結合到一起,那您的屏幕 保護程序一定增色許多。API函數(shù)的簡單調(diào)用例子就是這么容易,相信現(xiàn)在您 對API的調(diào)用已不再感到神秘了,接下來我們就看看一個 比較復雜的應用。第三節(jié):高手進階上面的關于API的調(diào)用的例子只是為了帶您去Win dows API世界中去探索一下。相信您已探索到了一點眉 目并想去實現(xiàn)一些更好玩的東西了。好!下面就向您 介紹一個很好玩同時又會使您的程序看起來更專業(yè)化 的一個API調(diào)用。相信您的機器上一定裝有金山詞霸,試著啟動它 您發(fā)現(xiàn)了什么?啟動畫面過后它不見了。把鼠標移到 桌面的右下角,原來它以圖標的形式藏在 Windows 的托盤中。用鼠標右擊它還會彈出一個菜單功能項供您 選擇?,F(xiàn)在您一定想把自己的程序也放到托盤,這樣您的 程序多具有專業(yè)水準!下面是此功能的實現(xiàn)步驟:1這里我們調(diào)用的API函數(shù)是: Shell_NotifyIcon,在您的模塊中添加如下的函數(shù)聲明 和常量聲明:以下常量告訴系統(tǒng)在托盤中您的圖標上發(fā)生了什么 操作常量聲明Public Const WM_MOUSEMOVE = &H200 在圖標上移動鼠標Public Const WM_LBUTTONDOWN = &H201 鼠標左鍵按下Public Const WM_LBUTTONUP = &H202 鼠標左鍵釋放Public Const WM_LBUTTONDBLCLK = &H203 雙擊鼠標左鍵Public Const WM_RBUTTONDOWN = &H204 鼠標右鍵按下Public Const WM_RBUTTONUP = &H205 鼠標右鍵釋放Public Const WM_RBUTTONDBLCLK = &H206 雙擊鼠標右鍵Public Const WM_SETHOTKEY = &H32 響應您定義的熱鍵API函數(shù)聲明Public Declare Function Shell_NotifyIcon Lib shell32.dll Alias Shell_NotifyIconA (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long自定義一個調(diào)用API Shell_NotifyIcon要用到的類 型NOTIFYICONDATAPublic Type NOTIFYICONDATAcdSize As Long NOTIFYICONDATA類型的大小hwnd As Long 你的應用程序窗體的名柄uId As Long 應用程序圖標資源的ID號uFlags As Long 使那些參數(shù)有效它是以下枚舉類型中的NIF_MESSAGE、NIF_ICON、NIF_TIP三組的組合uCallbackMessage As Long 鼠標移動時把此消息發(fā)給該圖標的窗體hIcon As Long 圖標名柄szTip As String*64 當鼠標在圖標上時顯示的Tip文本End Type這是一個枚舉類型它告訴API Shell_NotifyIcon去做什么操作Public Enum enm_NIM_ShellNIM_ADD=&H40 在“金碟”中加一圖標NIM_MODIFY=&H1 修改“金碟”中的圖標NIM_DELETE=&H2 刪除“金碟”中的圖標NIF_MESSAGE=&H1 使類型NOTIFYICONDATA中的uCallbackMessage有效NIF_ICON=&H2 使類型NOTIFYICONDATA中的hIcon有效NIF_TIP=&H4 使類型NOTIFYICONDATA中的szTip有效WM_MOUSEMOVE=&H200 使鼠標移動消息有效End Enum定義一個NOTIFYICONDATA類型的變量Public nidProgramData As NOTIFYICONDATA以上是函數(shù)及常量聲明和自定義的一個類型變量,下 面是此API函數(shù)的調(diào)用方法:2. 在窗體上用菜單編輯一個具有如下信息的菜單項:主菜單:無標題、名稱(mainMenu)子菜單:標題(API編程)、名稱(submnul);標題(退出)、名稱(submnu2).這里只是舉個例子,具體的功能你可以根據(jù)你的具體需要來編輯此菜單項3. 在窗體的Load事件中添加如下代碼:Private Sub Form_Load()隱藏窗體With Me.Top =-10000.Left = -10000.WindowState = vbMinimizedEnd With設置類型NOTIFYICONDATA所具有的特征With nidprogramData.cbSize = Len(nidProgramData).hwnd = Me.hwnd .uld = vbNull.uFlags = NIF_ICON Or NIF_TIP Or
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年茶藝師職業(yè)技能鑒定理論試卷(茶藝師職業(yè)培訓師資培訓報告)
- 2025年電梯安裝改造維修作業(yè)特種作業(yè)操作證考試試卷(電梯安全)事故案例分析
- 低碳城市案例研究:2025年城市規(guī)劃與城市更新策略
- 帕力亞多駱駝乳粉知識測試題
- 2025年基因治療藥物臨床研發(fā)新趨勢:市場前景與產(chǎn)業(yè)布局分析報告
- 2025年高性能鐵氧體一次磁粉項目規(guī)劃申請報告
- 汽車工程原理及技術案例分析題
- 2025年防雷工程項目立項申請報告
- 金融大數(shù)據(jù)在反欺詐中的機器學習應用報告2025
- 2025年社交媒體平臺文化影響力報告:熱點事件與輿論引導效應
- 螺桿冷水機組使用說明書
- 非固化橡膠瀝青防水涂料技術交底
- 海姆立克急救(生命的擁抱)課件
- 講稿董關鵬:如何面對媒體與公眾
- 酒店治安保衛(wèi)管理制度
- Q∕SY 06521-2016 煉油化工建設項目EPC總承包管理規(guī)范
- 課件心肺復蘇(CPR)
- 部編版小學語文二升三暑假銜接專項訓練—看圖寫話含例文
- 河道生態(tài)護岸設計概況
- 劉三姐歌詞大全
- 動物簡筆畫各種小動物簡(課堂PPT)
評論
0/150
提交評論