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不支援 預設引數同函式過載一樣,給程式設計...