function ShellProcHookHandler(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
begin
Result := 0;
If iCode < 0 Then
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
if iCode = HSHELL_WINDOWCREATED then
begin
//wParam 就是被创建窗口的句柄。
end;
end;
library cmphk;
uses
windows, messages, dialogs;//我喜欢用showmessage来测试
var
hookhandler:hhook;
ah:hwnd;//ah 是dll中的全程变量
这是钩子函数:
function hookhandler(iCode:integer;wParam,lParam:longint):longint;stdcall;
begin
if iCode <0 then
hookhandler:=callnexthookex(hkhnadle,icode,wparam,lparam);
if iCode \>=0 then
if PCWPSTRUCT(lParam)^.message=WM_CREATE then
if PCREATESTRUCT(CWPSTRUCT(lParam)^.lparam)^.lpszName='test1' then
begin
ah:=CWPSTRUCT(lParam)^.hwnd;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function gethandle:hwnd;stdcall;
begin
if ah<>0 then result:=ah
else result:=-1; //这个函数总是得到结果-1,是什么问题?
(其实hwnd这么赋值没什么问题的。系统会把它解释成一个很大的数....)
在主程序中,我们发现ah根本就没有返回先前得到的hwnd,事实上,ah的值是0