可以的啊。 function EnumChildWindowsProc(hwnd: THandle; lparam: Integer): LongBool; var buffer: array[0..255] of char; cName : array[0..254] of Char; wText : array[0..254] of Char; arr: array[0..255] of Char; cRect : TRect; str,strwrite:string; begin GetClassName(hWnd, cName, 255); // strwrite :=basedata.proxy_Name;// if (StrPas(cName)='Edit' ) or (StrPas(cName)='Button') or (StrPas(cName)='ComboBoxEx32' )then begin SendMessage(hWnd,WM_GETTEXT,255,Longint(@arr)); if (trim(strpas(arr))<>'Squid proxy-caching web server') and (StrPas(cName)='ComboBoxEx32') then begin str:=basedata.proxy_Name;// sendmessage(hWnd,WM_SETTEXT,length(str), longint(pchar(str))); end; Application.ProcessMessages; // showmessage(strpas(arr)); if (trim(strpas(arr))<>'Squid proxy-caching web server') and (StrPas(cName)='Edit')and (trim(strpas(arr))<>basedata.proxy_Name)then begin strwrite :=basedata.Proxy_Pwd;// ''; SendMessage(hWnd, WM_SETTEXT, 0, Integer(PChar(strwrite))); end; if (trim(strpas(arr))='确定') and (StrPas(cName)='Button') then begin SendMessage(hWnd, WM_LBUTTONDOWN, 0,0); SendMessage(hWnd, WM_LBUTTONUP, 0,0); end; Result := True; end; end;
function EnumChildWindowsProc(hwnd: THandle; lparam: Integer): LongBool;
var
buffer: array[0..255] of char;
cName : array[0..254] of Char;
wText : array[0..254] of Char;
arr: array[0..255] of Char;
cRect : TRect;
str,strwrite:string;
begin
GetClassName(hWnd, cName, 255);
// strwrite :=basedata.proxy_Name;//
if (StrPas(cName)='Edit' ) or (StrPas(cName)='Button') or (StrPas(cName)='ComboBoxEx32' )then
begin
SendMessage(hWnd,WM_GETTEXT,255,Longint(@arr));
if (trim(strpas(arr))<>'Squid proxy-caching web server') and (StrPas(cName)='ComboBoxEx32') then
begin
str:=basedata.proxy_Name;//
sendmessage(hWnd,WM_SETTEXT,length(str), longint(pchar(str)));
end;
Application.ProcessMessages;
// showmessage(strpas(arr));
if (trim(strpas(arr))<>'Squid proxy-caching web server') and (StrPas(cName)='Edit')and (trim(strpas(arr))<>basedata.proxy_Name)then
begin
strwrite :=basedata.Proxy_Pwd;// '';
SendMessage(hWnd, WM_SETTEXT, 0, Integer(PChar(strwrite)));
end;
if (trim(strpas(arr))='确定') and (StrPas(cName)='Button') then
begin
SendMessage(hWnd, WM_LBUTTONDOWN, 0,0);
SendMessage(hWnd, WM_LBUTTONUP, 0,0);
end;
Result := True;
end;
end;
自己谷歌搜索
给你个思路,用钩子注入目标程序,然后通过控件句柄获取目标实例再转换
句柄的获得方法有很多,可以通过鼠标位置定位然后传递给钩子,也可以在钩子内部遍历窗体控件通过控件名寻找
贴一段以前学习的摘要
PObjectInstance = ^TObjectInstance;
TObjectInstance = packed record
Code: Byte;
Offset: Integer;
Method: Integer;
Ins: Cardinal;
end;
var
P: PObjectInstance;
Cusedit:TEdit;
begin
P := PObjectInstance(GetWindowLong(WinHandle, GWL_WNDPROC));
Cusedit:=TEdit(P.Ins);