C 獲取窗體的控制代碼和獲取窗體中的空間

2022-07-28 18:36:14 字數 2213 閱讀 6806

findwindow,用來根據類名和視窗名來得到視窗控制代碼。但是這個函式不能查詢子視窗,也不區分大小寫。如果要從乙個視窗的子視窗中查詢需要使用的findwindowex。

1.在c#中使用方法如下:

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

private static extern intptr findwindow(string lpclassname,string lpwindowname);

intptr hwnd = findwindow(null,"計算器");

//其中第乙個引數為該窗體的類名,其實一般來說都設定為null

//第二個引數為窗體的標題名(一般第二個引數經常使用)

findwindowex該函式獲得乙個視窗的控制代碼,該視窗的類名和視窗名與給定的字串相匹配。這個函式查詢子視窗,從排在給定的子視窗後邊的子視窗開始。在查詢時不區分大小寫。hwndparent:要查詢子視窗的父視窗控制代碼。如果hwnjparent為null,則函式桌面視窗為父視窗,查詢桌面視窗的所有子視窗。windows nt5.0 and

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

hwndchildafter:子視窗控制代碼。查詢從在z序中的下乙個子視窗開始。子視窗必須為hwndparert視窗的直接子視窗而非後代子視窗。如果hwndchildafter為null,查詢從hwndparent的第乙個子視窗開始。如果hwndparent和hwndchildafter同時為null,查詢從hwndparent的第乙個子視窗開始。如果hwndparent和hwndchildafter同時為null,則函式查詢所有的頂層視窗及訊息視窗。(使用vs的自帶的spy++ 則如下圖)

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

lpszwindow:指向乙個指定了視窗(視窗標題)的空結束字串。如果該引數為null,則為所有視窗全匹配。返回值:如果該引數為null,則為所有視窗全匹配。返回值:如果函式成功,返回值為具有指定類名和視窗名的視窗控制代碼。如果函式失敗,返回值為null。

若想獲得更多錯誤資訊,請呼叫getlasterror函式。

//在程式中的使用如下

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

private static extern intptr findwindowex(intptr hwndparent,intptr hwndchildafter,string lpszclass,string lpszwindow)

const int bm_click = 0xf5;

intptr mainhwnd = findwindow(null,"使用者登入");

if(mainhwnd != intptr.zero)else

}

在有些時候獲取的控制項沒有標題,就不能通過findwindex()獲取對應的空間。為了解決上述問題則需要通過其他的方法進行解決。

windowfrompoint

函式功能:該函式獲得包含指定點的視窗的控制代碼,point引數指螢幕座標

point:指定乙個被檢測的點的point結構。返回值為包含該點的視窗控制代碼。如果不存在視窗包含這個點,則返回null。如果視窗無效或者隱藏,則返回null。通過測試,發現獲取部分控制項控制代碼,返回的都是父視窗的控制代碼。包含static text, groupbox等等。

[dllimport("user32.dll", entrypoint = "windowfrompoint")]//指定座標處窗體控制代碼

public static extern in windowfrompoint(int xpoint, int ypoint);

childwindowfrompoint(hwnd hwndparent, point point);返回值:如果點不在父視窗內,則返回null,如果點在父視窗,但不在任何子視窗上,則返回父視窗的控制代碼。

另外,特別要注意的是:引數point不是螢幕座標,而是相對容器視窗的座標。

C 獲取窗體的控制代碼和獲取窗體中的空間

findwindow,用來根據類名和視窗名來得到視窗控制代碼。但是這個函式不能查詢子視窗,也不區分大小寫。如果要從乙個視窗的子視窗中查詢需要使用的findwindowex。1.在c 中使用方法如下 dllimport user32.dll entrypoint findwindow private ...

滑鼠獲取窗體控制代碼

通過滑鼠座標獲取窗體控制代碼 cpoint lppoint getcursorpos lppoint 得到當前座標 hwnd hwnd 定義窗體控制代碼 hwnd windowfrompoint lppoint char formtitle max path char classname max p...

c 中獲取控制項窗體控制代碼,獲取窗體等的一些操作

1.control.handle 就是獲取控制項繫結到的視窗控制代碼。2.control.ishandlecreated 控制項是否有與其關聯的控制代碼 3.winform自定義函式findcontrol實現按名稱查詢控制項 publicstaticcontrol findcontrol contr...