【父窗口與子窗口】
每一個(gè)窗體form都是一個(gè)父窗口,它不是其他任一個(gè)窗體的子窗口.窗體上的所有控件,按鈕等就是窗體的子窗口.一個(gè)窗口(除了窗體)既可能是父窗口,也可能是子窗口.比如窗體里面有一個(gè)frame,frame里面的控件就是frame的子窗口,但frame同時(shí)也是窗體的子窗口.就像容器里面裝著容器.最大的那個(gè)容器就是窗體.每一個(gè)容器里面的東西就是其子窗口.
【常見的父窗口和子窗口的關(guān)系】
【父窗口對(duì)應(yīng)一個(gè)子窗口】
1、 有類名沒有標(biāo)題(有標(biāo)題沒有類名)
例如:記事本,它只有一個(gè)子窗口,子窗口只有類名沒有標(biāo)題。
我們要如何查找獲取到這個(gè)子窗口的句柄呢?
首先,我們先復(fù)習(xí)下按鍵里的獲取子窗口句柄的命令。
命令名稱:
FindEx 查找子窗口
命令功能:
根據(jù)父窗口句柄查找子窗口匹配類名或者匹配標(biāo)題
命令參數(shù):
參數(shù)1 整數(shù)型,父窗口句柄
參數(shù)2 整數(shù)型,子窗口句柄
參數(shù)3 字符串型,匹配類名
參數(shù)4 字符串型,匹配標(biāo)題
㈠ 先要獲取父窗口的句柄,然后根據(jù)父窗口的句柄來找子窗口。
記事本父窗口的標(biāo)題是:無標(biāo)題 - 記事本 類名是:Notepad
hwnd= Plugin.Window.find("Notepad" ,"無標(biāo)題 - 記事本") //獲取記事本父窗口句柄
㈡ 獲取到父窗口句柄之后,我們還需要知道子窗口的類名,類名為:Edit
zhwnd = Plugin.Window.findex(hwnd, 0, "Edit", 0) //獲取子窗口句柄
*這里子窗口句柄的值設(shè)置為0,可能會(huì)有很多童鞋很困惑,findex命令不就是獲取子窗口句柄的嗎?那這里還設(shè)置一個(gè)子窗口句柄的值干嘛?我要知道還要用findex來找嗎?
小編剛接觸這個(gè)命令的時(shí)候,對(duì)于這個(gè)參數(shù)也非常疑惑,后來發(fā)現(xiàn)是這樣的:
findex命令里的子窗口句柄,指的是當(dāng)前要查找的子窗口上面一個(gè)子窗口的句柄。
例如上圖:當(dāng)我們要找創(chuàng)建時(shí)間這個(gè)子窗口的時(shí)候,findex命令里的子窗口句柄參數(shù)就設(shè)置為紅框里子窗口的句柄。
2、沒有類名也沒有標(biāo)題
父窗口下只有一個(gè)子窗口的情況,標(biāo)題和類名不設(shè)置是可以的。
hwnd= Plugin.Window.find(0,"無標(biāo)題 - 記事本")
zhwnd = Plugin.Window.findex(hwnd, 0, 0, 0)
TracePrint zhwnd
結(jié)果:
【父窗口對(duì)應(yīng)多個(gè)子窗口】
1、 多個(gè)子窗口的類名或標(biāo)題不一樣
拿有道云筆記窗口作為例子:
它的這兩個(gè)子窗口的類名標(biāo)題都不一樣,這樣的情況我們按照前面介紹的父窗口下只有一個(gè)子窗口的方式來查找就可以了。
代碼:
hwnd = Plugin.Window.find(0,"有道云筆記 Haiye")
zhwnd = Plugin.Window.findex(hwnd, 0, "NETEASE POPO2007 List", 0)
TracePrint zhwnd
結(jié)果:
2、 多個(gè)子窗口的類名或標(biāo)題一樣
有道云筆記下的這兩個(gè)子窗口的類名、標(biāo)題都是一樣的。
hwnd = Plugin.Window.find(0,"有道云筆記 Haiye")
HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0)
上面的代碼只能找到第一個(gè)類名為Popo.UI.Controls.Class.SkinSplitter的子窗口,第二個(gè)無法找到。 這樣的情況,該怎么找第二個(gè)呢?
在前面我們提到過,findex里的子窗口句柄這個(gè)參數(shù),在這里我們就可以利用它。
思路如下:
1、獲取父窗口句柄
2、獲取第一個(gè)子窗口句柄
3、根據(jù)父窗口句柄以及第一個(gè)子窗口句柄,獲取第二個(gè)子窗口句柄
代碼:
hwnd = Plugin.Window.find(0,"有道云筆記 Haiye")
HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0)
TracePrint HwndEx
HwndEx = Plugin.Window.findex(hwnd, HwndEx, "Popo.UI.Controls.Class.SkinSplitter", 0)
TracePrint HwndEx
結(jié)果:
【子窗口下還有子窗口】
例如按鍵抓抓窗口:
抓抓父窗口下類名為#32770的子窗口,它還有它的子窗口,我們?nèi)绻?32770的子窗口下標(biāo)題為句柄的窗口,該如何查找呢?
思路:
1、獲取抓抓父窗口句柄
2、根據(jù)父窗口句柄找#32770的子窗口句柄
3、以#32770的子窗口作為父窗口, 繼續(xù)查找下一級(jí)子窗口
代碼:
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
結(jié)果: