var hkQQChat: HHOOK; //聊天窗口的句柄 hwQQChat: HWnd ; //聊天窗口的标题 tlQQChat: string; //窗口类名 clsName: string; buf: array [0..1024] of char;
const //QQ聊天窗口的类名 csQQ = ’#32770’;
function TitleHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; function EnumWindowsTitleFunc(Handle: THandle; lParam: LPARAM): boolean ; stdcall; function EnableWheelHook : Boolean; stdcall; export; function DisableWheelHook: Boolean; stdcall; export;
implementation
//钩子的处理函数 function TitleHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result:= 0; if Code<0 then begin Result:= CallNextHookEx(hkQQChat, Code, wParam, lParam); Exit; end else if Code = HCBT_ACTIVATE then begin //获取激活窗口的句柄,以及窗口类名,然后判断此窗口类名是否为#32770。 hwQQChat:= HWND(wParam); GetClassName(hwQQChat, buf, 1024); clsName:= string(buf); if clsName = csQQ then begin //如果窗口类名是#32770,则遍枚举所有窗口,并将窗口句柄传入 //【这里仅仅做演示用,因为Windows中很多窗口的类名均为#32770,所以这样判断效率会很底,】 //【有兴趣的朋友可以根据QQ聊天窗口的特性来增加判断条件,从而提高效率。】 EnumWindows(@EnumWindowsTitleFunc, hwQQChat); end; end; end;
function EnumWindowsTitleFunc(Handle: THandle; lParam: LPARAM): boolean ; stdcall;