獲得其他程式的子窗體

2022-03-31 11:45:05 字數 3041 閱讀 4207

通過乙個父窗體的控制代碼,遞迴的列舉它的子窗體,我們可以最終找到需要的子窗體。

用法如下:

nparenthandle: hwnd;

nchildhandle: hwnd;

nparenthandle :

=findwindow(

nil, 

'notepad');

ifnparenthandle 

<>

0then

nchildhandle :

=findchildwindow(nparenthandle, 

'somechildeditsclassname

');

------函式**------

varhwndfindchildwindow : hwnd;

function

enumwindowsforfindchildwindowproc(whandle: hwnd; lparam: lparam): bool; 

export

; stdcall

;const

max_window_name_len =80

;var

stargetclassname: 

string

;nhandle: hwnd;

scurrclassname: 

string

;bresult: boolean;

begin

if(hwndfindchildwindow 

<>0) 

then

exit;

stargetclassname :

=pchar(lparam);

scurrclassname :

=getwindowclass(whandle);

bresult :

=comparetext(scurrclassname, stargetclassname) =0

;if (bresult) 

then

hwndfindchildwindow :

=whandle

else

findchildwindow(whandle, pchar(lparam));

end;

function

findchildwindow(hwndparent: hwnd; classname: pchar) : hwnd;

begin

tryenumchildwindows(hwndparent, @enumwindowsforfindchildwindowproc, longint(pchar(classname)));

result :

=hwndfindchildwindow;

except

on exception 

doresult :=0

;end

;end;//

返回當前獲得焦點的窗體

function

getfocusedwindowfromparent(parentwnd:hwnd):hwnd;

varotherthread,

buffer : dword;

idcurrthread: dword;

begin

otherthread :

=getwindowthreadprocessid(parentwnd, @buffer);

idcurrthread :

=getcurrentthreadid;

ifattachthreadinput(idcurrthread, otherthread, true) 

then

begin

result :

=getfocus;

attachthreadinput(idcurrthread, otherthread, false);

endelse

result:

=getfocus;

end;

//獲得當前獲得焦點的子窗體,即使它是其他應用程式的窗體

function

getfocusedchildwindow: hwnd;

begin

result :

=getfocusedwindowfromparent(getforegroundwindow);

end;

//獲得窗體的文字

function

eigetwintext(nhandle: integer): 

string

;var

pctext: 

array[0

..32768

] of

char;

begin

sendmessage(nhandle, wm_gettext, 

32768

, longint(@pctext));

result :

=pctext;

end;

//設定窗體的文字

procedure

eisetwintext(nhandle: integer; 

const

snewtext: 

string

);begin

sendmessage(nhandle, wm_settext, length(snewtext), longint(pchar(trim(snewtext))));

end;

//返回窗體的類名

function

eigetwindowclass(

const

nhandle: hwnd): 

string

;var

szclassname: 

array[0

..255

] of

char;

begin

getclassname(nhandle, szclassname, 

255);

result :

=szclassname;

end;

獲得其他程式的子窗體

通過乙個父窗體的控制代碼,遞迴的列舉它的子窗體,我們可以最終找到需要的子窗體。用法如下 nparenthandle hwnd nchildhandle hwnd nparenthandle findwindow nil,notepad ifnparenthandle 0then nchildhand...

C 獲得其他程式窗體控制項中資訊的方法

這裡演示了獲得其他程式窗體控制項資訊的方法,用findwindow api找到文字框控制代碼,用sendmessagermswjnq wm gettext 獲得文字 include bool callback enumchildpr程式設計客棧oc hwnd hwnd,lparam lparam i...

如何獲得其他程式的EDIT控制項中的內容並修改

zzz如何獲得其他程式的edit控制項中的內容呢?第乙個想法就是使用getwindowtext函式,設定其內容的話就是setwindowtext函式,其實不對,這兩個函式對於其他的控制項都能夠正常工作,唯獨對於edit控制項不行,我在這邊困惑了好久,甚至想去逆向一下程式,看看到底有沒有傳送wm ge...