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

下載本文檔

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

文檔簡(jiǎn)介

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

評(píng)論

0/150

提交評(píng)論