LabVIEW調(diào)用WindowsAPI函數(shù)實現(xiàn)VI窗口置頂_第1頁
LabVIEW調(diào)用WindowsAPI函數(shù)實現(xiàn)VI窗口置頂_第2頁
LabVIEW調(diào)用WindowsAPI函數(shù)實現(xiàn)VI窗口置頂_第3頁
LabVIEW調(diào)用WindowsAPI函數(shù)實現(xiàn)VI窗口置頂_第4頁
LabVIEW調(diào)用WindowsAPI函數(shù)實現(xiàn)VI窗口置頂_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

National Instruments LabVIEW 虛擬儀器 1 LabVIEWLabVIEW 調(diào)用調(diào)用 WindowsWindows APIAPI 實現(xiàn)實現(xiàn) VI VI 窗口置頂窗口置頂 前些天同事用 LabVIEW 開發(fā)了個常用的小工具軟件 礙于電腦屏幕太小 想讓這小工 具一直保持在所有窗口的最頂端 置頂 幾個人討論研究發(fā)現(xiàn)通過 LabVIEW 的屬性節(jié)點 只能實現(xiàn) VI 程序在 LabVIEW 軟件中保持最前 而在其他窗口沒能置頂 未能達(dá)到想要的效 果 通過上網(wǎng)查找資料 軟件置頂是與操作平臺的控制相關(guān) 需要調(diào)用 Windows API 去實 現(xiàn)這功能 研究了一下 調(diào)用 Windows API 能很好的實現(xiàn)了 VI 置頂 百度上用 LabVIEW 調(diào) 用 Windows API 的教程 LabVIEW 版本比較舊 為方便大家更好的學(xué)習(xí) 現(xiàn)將自己研究的方 法分享出來 一一 什么是什么是 Windows API Windows 這個多作業(yè)系統(tǒng)除了協(xié)調(diào)應(yīng)用程序的執(zhí)行 分配內(nèi)存 管理資源 之外 它同時也是一個很大的服務(wù)中心 調(diào)用這個服務(wù)中心的各種服務(wù) 每一種服務(wù)就是一個函 數(shù) 可以幫應(yīng)用程序達(dá)到開啟視窗 描繪圖形 使用周邊設(shè)備等目的 由于這些函數(shù)服務(wù) 的對象是應(yīng)用程序 Application 所以便稱之為 Application Programming Interface 簡稱 API 函數(shù) WIN32 API 也就是 Microsoft Windows 32 位平臺的應(yīng)用程序編程接口 Windows API 包括幾千個可調(diào)用的函數(shù) 它們大致可分為以下幾類 基本服務(wù) 組件 服務(wù) 用戶界面服務(wù) 圖形多媒體服務(wù) 消息和協(xié)作 網(wǎng)絡(luò) Web 服務(wù) 二 二 Windows API 的發(fā)展現(xiàn)狀的發(fā)展現(xiàn)狀 當(dāng) WINDOWS 操作系統(tǒng)開始占據(jù)主導(dǎo)地位的時候 開發(fā) WINDOWS 平臺下的應(yīng)用程序 成為人們的需要 而在 WINDOWS 程序設(shè)計領(lǐng)域處于發(fā)展的初期 WINDOWS 程序員所能 使用的編程工具唯有 API 函數(shù) 這些函數(shù)是 WINDOWS 提供給應(yīng)用程序與操作系統(tǒng)的接口 他們猶如 積木塊 一樣 可以搭建出各種界面豐富 功能靈活的應(yīng)用程序 所以可以認(rèn) 為 API 函數(shù)是構(gòu)筑整個 WINDOWS 框架的基石 在它的下面是 WINDOWS 的操作系統(tǒng)核心 而它的上面則是所有的華麗的 WINDOWS 應(yīng)用程序 程序員想編寫具有 Windows 風(fēng)格的軟件 必須借助 API API 也因此被賦予至高無上的 地位 但是 如若沒有合適的 Windows 編程平臺 那么 Windows 開發(fā)是一項很復(fù)雜的工 作 在可視化編程 IDE 出來之前 那時的 WINDOWS 程序開發(fā)還是比較復(fù)雜的工作 程序 員必須熟記一大堆常用的 API 函數(shù) 而且還得對 WINDOWS 操作系統(tǒng)有深入的了解 然而 隨著軟件技術(shù)的不斷發(fā)展 在 WINDOWS 平臺上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境 程序 員可以采用 所見即所得 的編程方式來開發(fā)具有精美用戶界面和功能強大的應(yīng)用程序 這些優(yōu)秀可視化編程環(huán)境操作簡單 界面友好 諸如 VB VC DELPHI 等 在這些 工具中提供了大量的類庫和各種控件 它們替代了 API 的神秘功能 事實上這些類庫和控 件都是構(gòu)架在 WIN32 API 函數(shù)基礎(chǔ)之上的 是封裝了的 API 函數(shù)的集合 它們把常用的 API 函數(shù)的組合在一起成為一個控件或類庫 并賦予其方便的使用方法 所以極大的加速了 WINDOWS 應(yīng)用程序開發(fā)的過程 有了這些控件和類庫 程序員便可以把主要精力放在程 序整體功能的設(shè)計上 而不必過于關(guān)注技術(shù)細(xì)節(jié) 實際上如果我們要開發(fā)出更靈活 更實用 更具效率的應(yīng)用程序 必然要涉及到直接 使用 API 函數(shù) 雖然類庫和控件使應(yīng)用程序的開發(fā)簡單的多 但它們只提供 WINDOWS 的 一般功能 對于比較復(fù)雜和特殊的功能來說 使用類庫和控件是非常難以實現(xiàn)的 這時就 需要采用 API 函數(shù)來實現(xiàn) LabVIEW 調(diào)用 WindowsAPI 實現(xiàn) VI 窗口置頂 這也是 API 函數(shù)使用的場合 所以我們對待 API 函數(shù)不必刻意去研究每一個函數(shù)的用 法 那也是不現(xiàn)實的 能用得到的 API 函數(shù)有幾千個呢 正如某位大蝦所說 API 不要去 學(xué) 在需要的時候去查 API 幫助就足夠了 三 三 LabVIEW 怎么去調(diào)用怎么去調(diào)用 Windows API 上面介紹已經(jīng)講了 API 是一個操作系統(tǒng)與應(yīng)用程序的接口函數(shù) LabVIEW 作為一個程 序開發(fā)平臺 環(huán)境 同樣可以調(diào)用 Windows API 函數(shù)去實現(xiàn)應(yīng)用程序的多功能化 應(yīng)用程序窗口置頂屬于窗口效果控制 需要先獲取當(dāng)前窗口句柄 然后再去設(shè)置其他 API 函數(shù)的參數(shù) 獲取當(dāng)前窗口句柄的 Windows API 函數(shù)是 FindWindowA 我們就先拿這個 函數(shù)進行講解如何實現(xiàn) LabVIEW 調(diào)用 API 調(diào)用前 需要對此函數(shù)進行一個詳細(xì)的了解 可以利用 WindowsAPI 查詢器查得此函 數(shù)的介紹 也可以通過百度百科獲得 對比發(fā)現(xiàn)百度百科比較全面 這里選百度百科的介 紹 表表 1 函數(shù)函數(shù) FindWindowA 函數(shù)名FindWindowA 函數(shù)原型int32 t FindWindowA int32 t lpClassName CStr lpWindowName 功能描述檢索處理頂級窗口的類名和窗口名稱匹配指定的字符串 輸入?yún)?shù) 1lpClassName String 指向一個以 null 結(jié)尾的 用來指定類名的字符串 注 使用時將此參數(shù)設(shè)置為 Long 型 直接賦常量 0 輸入?yún)?shù) 2lpWindowName String 指向一個以 null 結(jié)尾的 用來指定窗口名 即窗 口標(biāo)題 的字符串 如果此參數(shù)為 NULL 則匹配所有窗口名 輸出參數(shù)無 返回值Long 如果函數(shù)執(zhí)行成功 則返回值是擁有指定窗口類名或窗口名的窗口 的句柄 如果函數(shù)執(zhí)行失敗 則返回值為 NULL FindWindowA 這個函數(shù)在 user32 dll 這個動態(tài)庫里面 dll 是動態(tài)鏈接庫 Dynamic Link Library DLL 是一個包含可由多個程序 同時使用的代碼和數(shù)據(jù)的庫 使用 DLL 更容易地 將更新應(yīng)用于各個模塊 而不會影響該程序的其他部分 user32 dll 這個動態(tài)庫的路徑一般 在 C Windows System32 user32 dl 有了以上信息就可以開始用 LabVIEW 調(diào)用 FindWindowA 這個 API 函數(shù)了 新建一個 VI 后面板點開函數(shù)面板 在 互連接口 庫與可執(zhí)行程序 調(diào)用庫函數(shù)節(jié)點 如圖 1 圖 1 調(diào)用庫函數(shù)節(jié)點面板路徑圖 點擊后在后面板出現(xiàn) 利用即時幫 助可查看此節(jié)點的簡單介紹 如右圖 2 National Instruments LabVIEW 虛擬儀器 3 圖 2 調(diào)用庫函數(shù)節(jié)點簡介 雙擊此函數(shù)節(jié)點 出現(xiàn)調(diào)用庫函數(shù)窗口 按標(biāo)號依次選擇和設(shè)置 1 選擇 dll 庫路徑 C Windows System32 user32 dl 2 選擇調(diào)用的函數(shù)名 FindWindowA 3 在 調(diào)用規(guī)范中選 stdcall WINAPI 如圖 3 所示 圖 3 調(diào)用庫函數(shù)路徑和函數(shù)選擇 設(shè)置完函數(shù)面板 1 點擊參數(shù) 2 將類型設(shè)為數(shù)值 如圖 4 LabVIEW 調(diào)用 WindowsAPI 實現(xiàn) VI 窗口置頂 圖 4 返回類型值設(shè)置 同一個面板 1 按添加參數(shù)按鈕 2 在輸入?yún)?shù)名稱 IpClassName 3 選擇參數(shù)類型為 字符串 如圖 5 所示 圖 5 添加參數(shù)并設(shè)置名稱和類型 同一個面板 1 按添加參數(shù)按鈕 2 在輸入?yún)?shù)名稱 IpWindowName 3 選擇參數(shù)類型 為 字符串 如圖 6 所示 圖 6 添加參數(shù) 2 設(shè)置名稱和類型 到此 API 函數(shù) FindWindowA 的調(diào)用設(shè)置結(jié)束 按確認(rèn)后得到 通過創(chuàng)建輸入輸出控件可知其結(jié)構(gòu) 具體如下圖 7 所示 National Instruments LabVIEW 虛擬儀器 5 圖 7 各引線參數(shù)名 四 調(diào)用四 調(diào)用 API 函數(shù)實現(xiàn)函數(shù)實現(xiàn) VI 窗口置頂窗口置頂 實現(xiàn)窗口置頂需要調(diào)用 FindWindowA GetWindowLongA SetWindowLongA SetWindowPos 共四個 API 函數(shù) 整 個調(diào)用流程由右圖所示 四個 API 函數(shù)都在 user32 dll 動態(tài)庫里面可以找到 詳細(xì)的設(shè)置這 里不再贅述 下面是除 FindWindowA 函數(shù)其它三個函數(shù)的參數(shù)介紹 表表 2 函數(shù)函數(shù) GetWindowLongA 函數(shù)名GetWindowLongA 函數(shù)原型int32 t GetWindowLongA int32 t hWnd int32 t nIndex 功能描述該函數(shù)獲得有關(guān)指定窗口的信息 函數(shù)也獲 得在額外窗口內(nèi)存中指定偏移位地址的 32 位度整型值 輸入?yún)?shù) 1hWnd Long 窗口句柄及間接給出的窗口 所屬的窗口類 輸入?yún)?shù) 2nlndex Long 指定要獲得值的大于等于 0 的值的偏移量 有效值的范圍從 0 到額外窗 口內(nèi)存空間的字節(jié)數(shù)減 4 其值可以是下面幾種 GWL EXSTYLE 20 獲得擴展窗口風(fēng)格 GWL HINSTANCE 6 獲得應(yīng)用實例的句 柄 GWL HWNDPARENT 8 如果父窗口存 在 獲取父窗口句柄 GWL ID 16 獲得窗口標(biāo)識 GWL STYLE 16 獲得窗口風(fēng)格 GWL USERDATA 21 獲得與窗口有關(guān)的 開始 調(diào)用 FindWindowA函數(shù) 獲取當(dāng)前窗口句柄 調(diào)用 GetWindowLongA函數(shù) 獲取當(dāng)前窗口信息 調(diào)用 SetWindowLongA函數(shù) 設(shè)置窗口屬性 調(diào)用 SetWindowPos函數(shù) 使當(dāng)前窗口至于頂層 結(jié)束 LabVIEW 調(diào)用 WindowsAPI 實現(xiàn) VI 窗口置頂 32 位值 每一個窗口均有一個由創(chuàng)建該窗 口的應(yīng)用程序使用的 32 位值 GWL WNDPROC 4 獲得窗口過程的地址 或代表窗口過程的地址的句柄 輸出參數(shù)無 返回值Long 如果函數(shù)執(zhí)行成功 則返回值是擁有 指定窗口類名或窗口名的窗口的句柄 如果 函數(shù)執(zhí)行失敗 則返回值為 NULL 表表 3 函數(shù)函數(shù) SetWindowLongA 函數(shù)名SetWindowLongA 函數(shù)原型int32 t SetWindowLongA int32 t hWnd int32 t nIndex int32 t dwNewLong 功能描述該函數(shù)用來改變指定窗口的屬性 函數(shù)也將指定的一個 32 位值設(shè)置在窗 口的額外存儲空間的指定偏移位置 輸入?yún)?shù) 1hWnd Long 窗口句柄及間接給出的窗口所屬的類 輸入?yún)?shù) 2nlndex Long 指定將設(shè)定的大于等于 0 的偏移值 有效值的范圍從 0 到 額外類的存儲空間的字節(jié)數(shù)減 4 其值可以是以下幾種 GWL EXSTYLE 20 設(shè)定一個新的擴展風(fēng)格 GWL HINSTANCE 6 設(shè)置一個新的應(yīng)用程序?qū)嵗浔?GWL ID 12 設(shè)置一個新的窗口標(biāo)識符 GWL STYLE 16 設(shè)定一個新的窗口風(fēng)格 GWL USERDATA 21 設(shè)置與窗口有關(guān)的 32 位值 每個窗口均有一個 由創(chuàng)建該窗口的應(yīng)用程序使用的 32 位值 GWL WNDPROC 4 為窗口過程設(shè)定一個新的地址 GWL HWNDPARENT 8 改變子窗口的父窗口 應(yīng)使用 SetParent 函數(shù) 輸入?yún)?shù) 3dwNewLong Long 由 nIndex 指定的窗口信息的新值 其值可以是一下幾種 LVS ICON 大圖標(biāo)顯示 LVS SMALLICON 小圖標(biāo)顯示 LVS LIST 列表顯示 LVS REPORT 詳細(xì)報表顯示 輸出參數(shù)無 返回值Long 如果函數(shù)執(zhí)行成功 則返回值是擁有指定窗口類名或窗口名的窗口 的句柄 如果函數(shù)執(zhí)行失敗 則返回值為 NULL 表表 4 函數(shù)函數(shù) SetWindowPos 函數(shù)名SetWindowPos 函數(shù)原型int32 t SetWindowPos int32 t hWnd int32 t hWndInsertAfter int32 t x int32 t y int32 t cx int32 t cy int32 t wFlags 功能描述為窗口指定一個新位置和狀態(tài) 它也可改變窗口在內(nèi)部窗口列表中的位置 輸入?yún)?shù) 1hWnd Long 窗口句柄及間接給出的窗口所屬的窗口類 輸入?yún)?shù) 2hWndlnsertAfter Long 在 z 序中的位于被置位的窗口前的窗口句柄 該 參數(shù)必須為一個窗口句柄 其值可以是一下幾種 HWND BOTTOM 將窗口置于窗口列表底部 HWND TOP 0 將窗口置于 Z 序列的頂部 Z 序列代表在分級結(jié)構(gòu)中 National Instruments LabVIEW 虛擬儀器 7 窗口針對一個給定級別的窗口顯示的順序 HWND TOPMOST 1 將窗口置于列表頂部 并位于任何最頂部窗口的 前面 HWND NOTOPMOST 2 將窗口置于列表頂部 并位于任何最頂部窗 口的后面 輸入?yún)?shù) 3x Long 窗口新的 x 坐標(biāo) 輸入?yún)?shù) 4y Long 窗口新的 y 坐標(biāo) 輸入?yún)?shù) 5cx Long

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論