學會用按鍵精靈獲取子窗口句柄
電腦的桌面是最頂級的窗口,在桌面裏的其他程序窗口是桌面的子窗口。那到底父窗口和子窗口是怎麼理解的呢?
操作方法
(01)【父窗口與子窗口】每一個窗體form都是一個父窗口,它不是其他任一個窗體的子窗口.窗體上的所有控件,按鈕等就是窗體的子窗口.一個窗口(除了窗體)既可能是父窗口,也可能是子窗口.比如窗體裏面有一個frame,frame裏面的控件就是frame的子窗口,但frame同時也是窗體的子窗口.就像容器裏面裝着容器.最大的那個容器就是窗體.每一個容器裏面的東西就是其子窗口.
(02)【常見的父窗口和子窗口的關係】【父窗口對應一個子窗口】1、 有類名沒有標題(有標題沒有類名)例如:記事本,它只有一個子窗口,子窗口只有類名沒有標題。
![學會用按鍵精靈獲取子窗口句柄 學會用按鍵精靈獲取子窗口句柄](https://i3.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/e67a170fe968876257101086f9de00ee8bfc.jpg)
(03)我們要如何查找獲取到這個子窗口的句柄呢?首先,我們先複習下按鍵裏的獲取子窗口句柄的命令。命令名稱:FindEx 查找子窗口命令功能:根據父窗口句柄查找子窗口匹配類名或者匹配標題命令參數:參數1 整數型,父窗口句柄參數2 整數型,子窗口句柄參數3 字符串型,匹配類名參數4 字符串型,匹配標題㈠ 先要獲取父窗口的句柄,然後根據父窗口的句柄來找子窗口。記事本父窗口的標題是:無標題 - 記事本 類名是:Notepadhwnd= Plugin.Window.find("Notepad" ,"無標題 - 記事本") //獲取記事本父窗口句柄㈡ 獲取到父窗口句柄之後,我們還需要知道子窗口的類名,類名為:Editzhwnd = Plugin.Window.findex(hwnd, 0, "Edit", 0) //獲取子窗口句柄*這裏子窗口句柄的值設置為0,可能會有很多童鞋很困惑,findex命令不就是獲取子窗口句柄的嗎?那這裏還設置一個子窗口句柄的值幹嘛?我要知道還要用findex來找嗎?小編剛接觸這個命令的時候,對於這個參數也非常疑惑,後來發現是這樣的:findex命令裏的子窗口句柄,指的是當前要查找的子窗口上面一個子窗口的句柄。
![學會用按鍵精靈獲取子窗口句柄 第2張 學會用按鍵精靈獲取子窗口句柄 第2張](https://i1.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/eb73511db834d622560f0286f9de00ee88f5.jpg)
(04)例如上圖:當我們要找創建時間這個子窗口的時候,findex命令裏的子窗口句柄參數就設置為紅框裏子窗口的句柄。2、沒有類名也沒有標題父窗口下只有一個子窗口的情況,標題和類名不設置是可以的。hwnd= Plugin.Window.find(0,"無標題 - 記事本")zhwnd = Plugin.Window.findex(hwnd, 0, 0, 0)TracePrint zhwnd結果:
![學會用按鍵精靈獲取子窗口句柄 第3張 學會用按鍵精靈獲取子窗口句柄 第3張](https://i2.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/bc781715a960913f5d0a1686f9de00ee88f4.jpg)
(05)【父窗口對應多個子窗口】1、 多個子窗口的類名或標題不一樣拿有道雲筆記窗口作為例子:
![學會用按鍵精靈獲取子窗口句柄 第4張 學會用按鍵精靈獲取子窗口句柄 第4張](https://i3.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/e8610b0ead6e933b51134b86f9de00ee88f7.jpg)
(06)它的這兩個子窗口的類名標題都不一樣,這樣的情況我們按照前面介紹的父窗口下只有一個子窗口的方式來查找就可以了。代碼:hwnd = Plugin.Window.find(0,"有道雲筆記 Haiye")zhwnd = Plugin.Window.findex(hwnd, 0, "NETEASE POPO2007 List", 0)TracePrint zhwnd結果:
![學會用按鍵精靈獲取子窗口句柄 第5張 學會用按鍵精靈獲取子窗口句柄 第5張](https://i1.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/e5671017b677d6385e1a0b86f9de00ee88f6.jpg)
(07)2、 多個子窗口的類名或標題一樣
![學會用按鍵精靈獲取子窗口句柄 第6張 學會用按鍵精靈獲取子窗口句柄 第6張](https://i2.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/f97f0c05ec6c973808181b86f9de00ee88f1.jpg)
(08)有道雲筆記下的這兩個子窗口的類名、標題都是一樣的。hwnd = Plugin.Window.find(0,"有道雲筆記 Haiye")HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0)上面的代碼只能找到第一個類名為Popo.UI.Controls.Class.SkinSplitter的子窗口,第二個無法找到。 這樣的情況,該怎麼找第二個呢?在前面我們提到過,findex裏的子窗口句柄這個參數,在這裏我們就可以利用它。思路如下:1、獲取父窗口句柄2、獲取第一個子窗口句柄3、根據父窗口句柄以及第一個子窗口句柄,獲取第二個子窗口句柄代碼:hwnd = Plugin.Window.find(0,"有道雲筆記 Haiye")HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0)TracePrint HwndExHwndEx = Plugin.Window.findex(hwnd, HwndEx, "Popo.UI.Controls.Class.SkinSplitter", 0)TracePrint HwndEx結果:
![學會用按鍵精靈獲取子窗口句柄 第7張 學會用按鍵精靈獲取子窗口句柄 第7張](https://i3.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/ea200f02b16093304a1c0f86f9de00ee88f2.jpg)
(09)【子窗口下還有子窗口】例如按鍵抓抓窗口:
![學會用按鍵精靈獲取子窗口句柄 第8張 學會用按鍵精靈獲取子窗口句柄 第8張](https://i1.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/e67e110faa358b3c56071286f9de00ee88fc.jpg)
![學會用按鍵精靈獲取子窗口句柄 第9張 學會用按鍵精靈獲取子窗口句柄 第9張](https://i2.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/f9270e17a76ad5324f131086f9de00ee89f5.jpg)
(10)抓抓父窗口下類名為#32770的子窗口,它還有它的子窗口,我們如果要找#32770的子窗口下標題為句柄的窗口,該如何查找呢?思路:1、獲取抓抓父窗口句柄2、根據父窗口句柄找#32770的子窗口句柄3、以#32770的子窗口作為父窗口, 繼續查找下一級子窗口代碼:hwnd= Plugin.Window.find(0,"按鍵抓抓輔助工具2014.00.14006")zhwnd = Plugin.Window.findex(hwnd, 0, "#32770", 0)zzhwnd = Plugin.Window.findex(zhwnd, 0, 0, "句柄")TracePrint zzhwnd結果:
![學會用按鍵精靈獲取子窗口句柄 第10張 學會用按鍵精靈獲取子窗口句柄 第10張](https://i3.quzhizhan.com/f7205759/e679020ab8/bd24515fed36d660/e061091ab0668e3059170886f9de00ee89f4.jpg)