dll注入程序(别人做的程序)当中,在dll里面
chldhd:=findwindowex(wdhdl,nil,nil,'保存');
这个语句始终是0(没有找到保存控件)。
不知道我错在哪里。
请高手指教。
function HookProc(nCode:Integer;WParam: WPARAM;LParam:LPARAM):LRESULT;stdcall;
var
Pos: TPoint;
chldhd: HWND;
ScreenDC: HDC;
cap: array[0..1024] of Char;
ScreenColor: COLORREF;
begin
wdhdl:= FindWindow(NIL,PChar('dll注入窗体'));
showmessage(inttostr(wdhdl));
chldhd:=findwindowex(wdhdl,0,0,'保存');
showmessage(inttostr(chldhd));
if chldhd=0 then exit; while chldhd<>0 do begin
showmessage(inttostr(chldhd));
getwindowtext(chldhd,cap,99);
showmessage(cap);
chldhd:=findwindowex(wdhdl,chldhd,pchar('button'),nil);
end;
Result := CallNextHookEx(hHk,nCode,WParam,LParam);
end;function HookOn(lpHwnd:HWND;lpType:Longint): Longint;stdcall; export;
begin
hThread :=GetWindowThreadProcessId(lpHwnd,hmod);
//注入开始
hHk :=SetWindowsHookEx(lpType,@HookProc,hInstance,hThread); // WH_KEYBOARD
Result :=hHk
end;
chldhd:=findwindowex(wdhdl,nil,nil,'保存');
这个语句始终是0(没有找到保存控件)。
不知道我错在哪里。
请高手指教。
function HookProc(nCode:Integer;WParam: WPARAM;LParam:LPARAM):LRESULT;stdcall;
var
Pos: TPoint;
chldhd: HWND;
ScreenDC: HDC;
cap: array[0..1024] of Char;
ScreenColor: COLORREF;
begin
wdhdl:= FindWindow(NIL,PChar('dll注入窗体'));
showmessage(inttostr(wdhdl));
chldhd:=findwindowex(wdhdl,0,0,'保存');
showmessage(inttostr(chldhd));
if chldhd=0 then exit; while chldhd<>0 do begin
showmessage(inttostr(chldhd));
getwindowtext(chldhd,cap,99);
showmessage(cap);
chldhd:=findwindowex(wdhdl,chldhd,pchar('button'),nil);
end;
Result := CallNextHookEx(hHk,nCode,WParam,LParam);
end;function HookOn(lpHwnd:HWND;lpType:Longint): Longint;stdcall; export;
begin
hThread :=GetWindowThreadProcessId(lpHwnd,hmod);
//注入开始
hHk :=SetWindowsHookEx(lpType,@HookProc,hInstance,hThread); // WH_KEYBOARD
Result :=hHk
end;
FindWindowEx(
Parent: HWND; {要查找子窗口的父窗口句柄}
Child: HWND; {子窗口句柄}
ClassName: PChar; {}
WindowName: PChar {}
): HWND;
{
如果 Parent 是 0, 则函数以桌面窗口为父窗口, 查找桌面窗口的所有子窗口;
如果 是 HWND_MESSAGE, 函数仅查找所有消息窗口;
子窗口必须是 Parent 窗口的直接子窗口;
如果 Child 是 0, 查找从 Parent 的第一个子窗口开始;
如果 Parent 和 Child 同时是 0, 则函数查找所有的顶层窗口及消息窗口.
}给你个例子
unit unitWinExe;interfaceuses
Windows,Messages,Dialogs;implementation
var
fHwnd,cHwnd:THandle;
cmdLine:string;
begin
cmdLine := C:\Program Files\Huawei-3Com\H3C 802.1X 客户端\Dot1XClient.exe;
WinExec(PChar(cmdLine),SW_HIDE) ; fHwnd:=FindWindow(#32770,nil); //查找到窗口#32770,’#32770‘用Spy++查出来的。 if fHwnd>0 then
begin
cHwnd:=FindWindowEx(fHwnd,0,nil,连接); //查找#32770的子窗口连接
if cHwnd>0 then PostMessage(cHwnd,WM_KEYDOWN,VK_RETURN ,0) ; //按回车键
end;end.
var
Pos: TPoint;
chldhd: HWND;
ScreenDC: HDC;
cap: array[0..1024] of Char;
ScreenColor: COLORREF;
begin
wdhdl:= FindWindow(NIL,PChar('dll注入窗体'));
showmessage(inttostr(wdhdl));
chldhd:=findwindowex(wdhdl,0,0,'保存');
showmessage(inttostr(chldhd));
if chldhd=0 then exit; while chldhd<>0 do begin
showmessage(inttostr(chldhd));
getwindowtext(chldhd,cap,99);
showmessage(cap);
chldhd:=findwindowex(wdhdl,chldhd,pchar('button'),nil);
end;
Result := CallNextHookEx(hHk,nCode,WParam,LParam);
end;function HookOn(lpHwnd:HWND;lpType:Longint): Longint;stdcall; export;
begin
hThread :=GetWindowThreadProcessId(lpHwnd,hmod);
//注入开始
hHk :=SetWindowsHookEx(lpType,@HookProc,hInstance,hThread); // WH_KEYBOARD
Result :=hHk
end;