findwindowexa findwindowexa怎么樣)

摘要: 大家好,小宜來為大家講解下。findwindowexa,findwindowexa怎么樣)這個(gè)很多人還不知道,現(xiàn)在讓我們一起來看看吧!1. findWindowExA函數(shù):find...

大家好,小宜來為大家講解下。findwindowexa,findwindowexa怎么樣)這個(gè)很多人還不知道,現(xiàn)在讓我們一起來看看吧!

1. findWindowExA函數(shù):

findWindowExA函數(shù)是一個(gè)用于查找特定窗口的Windows API函數(shù),它可以在窗口樹中向下搜索子窗口,找到指定的窗口句柄。由它找到的窗口句柄,可以再繼續(xù)搜索下一個(gè)窗口句柄,以此構(gòu)建復(fù)雜的窗口樹結(jié)構(gòu)。它是Proxy/Server交互設(shè)計(jì)模式(Remote Procedure Call)中常用的函數(shù)之一,在Win32,MFC,ATL等框架中都有應(yīng)用,常常與SendMessage/PostMessage一起使用,用于實(shí)現(xiàn)遠(yuǎn)程控制。

2. findWindowExA函數(shù)的參數(shù)列表:

findWindowExA函數(shù)接受如下參數(shù):

(1)父窗口句柄,用于指定父窗口;

(2)子窗口句柄,用于指定要搜索的子窗口,如果父窗口為零,此參數(shù)也將被忽略;

(3)窗口類名,指定要搜索的窗口的類名;

(4)窗口標(biāo)題,指定要搜索的窗口的標(biāo)題;

(5)搜索類型,指定搜索的類型,比如可以搜索控件ID、類名、窗口標(biāo)題;

(6)一個(gè)附加參數(shù),根據(jù)第五個(gè)參數(shù)指定的搜索類型,傳入不同的參數(shù)值,得到不同的搜索結(jié)果。

3. findWindowExA函數(shù)的返回值:

findWindowExA函數(shù)返回符合搜索條件的窗口句柄,如果沒有找到,則返回零。

4. findWindowExA函數(shù)的應(yīng)用:

(1)在窗口樹中進(jìn)行復(fù)雜的搜索;

(2)實(shí)現(xiàn)遠(yuǎn)程控制,如針對(duì)一個(gè)其他程序的獨(dú)立窗口,發(fā)送消息以改變它的大小、位置、狀態(tài)等;

(3)自動(dòng)化測(cè)試,如在應(yīng)用程序中搜索特定的控件并給它發(fā)送消息。

另外,當(dāng)需要在桌面程序中定位特定的控件,或向窗口句柄發(fā)送消息時(shí),findWindowExA函數(shù)可以派上用場(chǎng),可以幫助實(shí)現(xiàn)自動(dòng)化操作。最后,findWindowExA函數(shù)廣泛應(yīng)用于不同的計(jì)算機(jī)平臺(tái),可以輕松地在不同的平臺(tái)上實(shí)現(xiàn)控制臺(tái)程序的遠(yuǎn)程控制。

1、findwindowexa函數(shù):findwindowexa函數(shù)可以在擁有父子關(guān)系的窗口中查找特定子窗口。

2、函數(shù)原型:HWND findwindowexa(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow);

3、函數(shù)入?yún)ⅲ篽wndParent指定要查找子窗口的父窗口句柄;hwndChildAfter指定要查找的子窗口的句柄,該句柄必須是具有hwndParent參數(shù)值指定的父窗口的子窗口;lpszClass指定子窗口所屬的窗口類,也可以指定一個(gè)字符串,它指定了子窗口所屬的類名;lpszWindow指定子窗口的標(biāo)題名,也可以為一個(gè)指定的子窗口的窗口名。

4、函數(shù)返回值:返回值是查找得到的子窗口句柄,若無子窗口,則返回NULL。

5、函數(shù)特性:findwindowexa函數(shù)的關(guān)鍵字是深度優(yōu)先遍歷窗口樹的方法,即從指定的父窗口開始,先遍歷其最直接的孩子,然后再遍歷孩子的孩子,依次類推;findwindowexa函數(shù)支持遍歷窗口樹中多個(gè)層次,可以跨越多個(gè)父窗口查找指定的子窗口;findwindowexa函數(shù)查找的子窗口不僅可以是可見窗口,也可以是隱藏窗口;findwindowexa函數(shù)最大的作用就是用來跨越多層窗口查找子窗口;findwindowexa函數(shù)不能使用多線程查找,也不能使用多進(jìn)程查找。

6、應(yīng)用實(shí)例:

(1)假設(shè)要查找的窗口的類名為“myClassName”,窗口的標(biāo)題名為“myWindowName”,HWND hWndDialog為其父窗口句柄,則。

HWND hWndChild = FindWindowEx(hWndDialog,NULL,“myClassName”,“myWindowName”);

(2)下面的代碼實(shí)現(xiàn)了查找具有父子關(guān)系的窗口:

HWND hWnd;

HWND hwndDialog;

HWND hwndChild;

hWndChild = ::FindWindowEx(hwndDialog,NULL,NULL,NULL);

while(hWndChild != NULL) //循環(huán)搜索子窗口

{

hWnd = ::FindWindowEx(hWndChild,NULL,NULL,NULL);

if(hWnd != NULL) //如果當(dāng)前子窗口包含子窗口

{

hWndChild = hWnd;

}

else //如果當(dāng)前子窗口不包含子窗口

{

hwndChild = ::GetWindow(hWndChild,GW_HWNDNEXT); //搜索兄弟窗口

}

本文findwindowexa,findwindowexa怎么樣)到此分享完畢,希望對(duì)大家有所幫助。