獲得其他程式的子窗體

2021-05-23 14:48:12 字數 3693 閱讀 2903

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

用法如下:

nparenthandle: hwnd; 

nchildhandle: hwnd; 

nparenthandle := findwindow(nil, 'notepad'); 

ifnparenthandle <> 0then

nchildhandle := findchildwindow(nparenthandle, 'somechildeditsclassname'); 

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

var

hwndfindchildwindow : hwnd; 

functionenumwindowsforfindchildwindowproc(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

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

begin

try

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

result := hwndfindchildwindow; 

except

onexceptiondo

result := 0; 

end

end

//返回當前獲得焦點的窗體

functiongetfocusedwindowfromparent(parentwnd:hwnd):hwnd; 

var

otherthread, 

buffer : dword; 

idcurrthread: dword; 

begin

otherthread := getwindowthreadprocessid(parentwnd, @buffer); 

idcurrthread := getcurrentthreadid; 

ifattachthreadinput(idcurrthread, otherthread,true)thenbegin

result := getfocus; 

attachthreadinput(idcurrthread, otherthread,false); 

end

else

result:= getfocus; 

end

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

functiongetfocusedchildwindow: hwnd; 

begin

result := getfocusedwindowfromparent(getforegroundwindow); 

end

//獲得窗體的文字

functioneigetwintext(nhandle: integer):string

var

pctext:array[0..32768]ofchar; 

begin

sendmessage(nhandle, wm_gettext, 32768, longint(@pctext)); 

result := pctext; 

end

//設定窗體的文字

procedureeisetwintext(nhandle: integer;constsnewtext:string); 

begin

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

end

//返回窗體的類名

functioneigetwindowclass(constnhandle: hwnd):string

var

szclassname:array[0..255]ofchar; 

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...