C FindWindowEx引數詳解

2021-06-10 20:28:53 字數 4332 閱讀 8117

findwindowex引數詳解

本函式的其他內容在網路上都比較多,這裡主要說一下它的引數設定和搜尋結果的區別。

函式功能:在視窗列表中尋找與指定條件相符的第乙個子視窗。該函式獲得乙個視窗的控制代碼,該視窗的類名和視窗名與給定的字串相匹配。這個函式查詢子視窗,從排在給定的子視窗後面的下乙個子視窗開始。在查詢時不區分大小寫。

函式原型:

hwnd findwindowex(hwnd hwndparent,hwnd hwndchildafter,lpctstr lpszclass,lpctstr lpszwindow);

引數:

hwndparent:要查詢子視窗的父視窗控制代碼。

如果hwndparent為null,則函式以桌面視窗為父視窗,查詢桌面視窗的所有子視窗。

windows nt5.0 and later:如果hwndparent是hwnd_message,函式僅查詢所有訊息視窗。

hwndchildafter :子視窗控制代碼。查詢從在z序中的下乙個子視窗開始。子視窗必須為hwndparent視窗的直接子視窗而非後代視窗。如果hwndchildafter為null(c#中為new

intptr(0)),查詢從hwndparent的第乙個子視窗開始。如果hwndparent 和 hwndchildafter同時為null,則函式查詢所有的頂層視窗及訊息視窗。

lpszclass:指向乙個指定了類名的空結束字串,或乙個標識類名字串的成員的指標。如果該引數為乙個成員,則它必須為前次呼叫theglobaiaddatom函式產生的全域性成員。該成員為16位,必須位於lpclassname的低16位,高位必須為0。

lpszwindow:指向乙個指定了視窗名(視窗標題)的空結束字串。如果該引數為 null(注意:」」和null是有區別的),則為所有視窗全匹配。

返回值:如果函式成功,返回值為具有指定類名和視窗名的視窗控制代碼。如果函式失敗,返回值為null。

[dllimport("user32.dll", entrypoint = "findwindowex")]

public static extern intptr findwindowex(intptr hwndparent, intptr hwndchildafter, string lpclassname, string lpwindowname);

例子:

//******************

這部分內容是為了說明函式findwindowex的用法的額外的實驗部分******************//

intptr exitwnd = new

intptr(0);   //

臨時儲存操作窗體的控制代碼

stringbuilder stbf_wndstr = new

stringbuilder();//

定義儲存string的butter

stbf_wndstr.capacity = 60;

//1)

該例子一直無法找到exit按鍵,因為name不為null,而是等於"",null和""是有區別的

tbdisplay.text = tbdisplay.text +"\r\n\r\n1)

此處尋找不到exit的按鍵,因為name不為null,而是等於\"\"";

exitwnd = findwindowex(parenthwnd,new

intptr(0), lpszclass_submit,"");

if (!exitwnd.equals(intptr.zero))

else

//2)

尋找到exit的按鍵,因為name包含正確的名字"exit"

tbdisplay.text = tbdisplay.text +"\r\n\r\n2)

尋找到exit的按鍵,因為name包含正確的名字\"exit\"";

exitwnd = findwindowex(parenthwnd,new

intptr(0), lpszclass_submit,"exit");

if (!exitwnd.equals(intptr.zero))

else

//3)

此處尋找不到login的按鍵,因為name不為null,而是等於"",null和""是有區別的

tbdisplay.text = tbdisplay.text +"\r\n\r\n3)

此處尋找不到login的按鍵,因為name不為null,而是等於\"\"";

logbtwnd = findwindowex(parenthwnd, exitwnd, lpszclass_submit,"");

if (!logbtwnd.equals(intptr.zero))

else

//4)

此處尋找不到login的按鍵,因為findwindowex第二個引數為空,且name = null,從第乙個子視窗開始查詢,

//根據tab index的順序找到的第乙個屬於按鍵類的該是reset按鍵.

tbdisplay.text = tbdisplay.text

+ "\r\n\r\n4)

此處尋找不到login的按鍵,因為findwindowex第二個引數為空,且name = null,從第乙個子視窗開始查詢,"

+ "根據tab index的順序找到的第乙個屬於按鍵類的該是reset按鍵.";

logbtwnd = findwindowex(parenthwnd,new

intptr(0), lpszclass_submit,null);

if (!logbtwnd.equals(intptr.zero))

else

//5)

成功尋找到login的按鍵,此處第個引數放置exitwnd或者new intptr(0)都可以,因為exit和login都屬於相同的類,而且具有不同的name.

tbdisplay.text = tbdisplay.text

+ "\r\n\r\n5)

成功尋找到login的按鍵,此處第個引數放置exitwnd或者new intptr(0)都可以,"

+ "因為exit和login都屬於相同的類,而且具有不同的name.";

logbtwnd = findwindowex(parenthwnd, exitwnd, lpszclass_submit, lpszname_submit);

if (!logbtwnd.equals(intptr.zero))

else

//6)

成功尋找到login的按鍵,此處第個引數放置exitwnd,即使name=null也可以找到,因為exitwnd的下乙個就是login按鍵.

tbdisplay.text = tbdisplay.text

+ "\r\n\r\n6)

成功尋找到login的按鍵,此處第個引數放置exitwnd,即使name=null也可以找到,因為exitwnd的下乙個就是login按鍵.";

logbtwnd = findwindowex(parenthwnd, exitwnd, lpszclass_submit,null);

if (!logbtwnd.equals(intptr.zero))

else

return;

完整的源**請參考remotelogin的例子。

本段**輸出:

1) 此處尋找不到exit的按鍵,因為name不為null,而是等於""

err: exitwnd = null!!!

2) 尋找到exit的按鍵,因為name包含正確的名字"exit"

實驗內容: exitwnd.text = exit

3) 此處尋找不到login的按鍵,因為name不為null,而是等於""

無法找到登入按鍵的子視窗!!!

4) 此處尋找不到login的按鍵,因為findwindowex第二個引數為空,且name = null,從第乙個子視窗開始查詢,根據tab index的順序找到的第乙個屬於按鍵類的該是reset按鍵.

已搜尋到登入按鍵: reset

5) 成功尋找到login的按鍵,此處第2個引數放置exitwnd或者new intptr(0)都可以,因為exit和login都屬於相同的類,而且具有不同的name.

已搜尋到登入按鍵: login

6) 成功尋找到login的按鍵,此處第2個引數放置exitwnd,即使name=null也可以找到,因為exitwnd的下乙個就是login按鍵.

已搜尋到登入按鍵: login

預設引數,命名引數,可變引數

def sayname name string pk unit sayname 其中預設引數為pk,所以此時輸出pk sayname dog 此時傳入引數dog,那麼就以你當前傳入的引數為準,輸出dogdef speed distance float time float float println...

C 方法引數 值引數,引用引數,輸出引數

使用值引數,通過複製實參的值到形參的方式,把資料傳遞到方法,方法被呼叫的時候,系統做如下操作 在棧中為形參分配空間 複製實參到形參。注意 乙個值引數的實參不一定是變數,它可以是任何能夠計算成相應資料型別的表示式。在把變數用作實參之前,變數必須被賦值 除非是輸出引數,這個稍後介紹 對於引用型別,變數可...

C C 引數 預設引數 佔位符引數

不多說了,直接看 在c c 中表示空的引數列表 void test void 在c中表示不確定的引數數目,c 中表示空的引數列表 void test1 在c中編譯失敗,必須至少有乙個顯示引數 在c 中表示可變的引數數目 void test2 c 預設引數,c不支援 預設引數同函式過載一樣,給程式設計...