扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
HCBT_ACTIVATE HCBT_CREATEWND HCBT_DESTROYWND HCBT_MINMAX HCBT_MOVESIZE HCBT_SETFOCUS HCBT_SYSCOMMAND |
library HookPrj; uses SysUtils, Classes, QQTitleHook in ’QQTitleHook.pas’; exports EnableWheelHook, DisableWheelHook; begin hkQQChat:= 0; end. ========================================================== unit QQTitleHook; interface uses Windows, Messages, SysUtils, Dialogs, CommCtrl, StrUtils; 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; begin if (Handle = lParam) and boolean(GetWindowText(Handle, buf, 256)) then begin //根据窗口句柄获得窗口标题 tlQQChat:= string(buf); //然后判断标题中是否包含“与...聊天”等相关字符,如果包括则此窗口为QQ聊天窗口 if ((pos(’与’, tlQQChat)>0) and (pos(’聊天中’, tlQQChat)>0)) then begin //确定为聊天窗口后遍修改窗口标题。 tlQQChat := AnsiReplaceStr(tlQQChat, ’与’ , ’我的文档’); tlQQChat := AnsiReplaceStr(tlQQChat, ’聊天中’, ’’ ); SetWindowText(Handle, pchar(tlQQChat)); end; //【同上,这个地方大家可以自由控制,不仅仅局限在QQ、MSN等聊天窗口。】 //【而且想要将标题改成什么也可以自由控制,如果能根据修改后的窗口图标来确定标题】 //【比如通过修改将窗口图标替换成Delphi的图标,然后标题修改为Delphi7,谁还能看出破绽呢?哈哈】 if ((pos(’群 -’, tlQQChat)>0) or (pos(’高级群 -’, tlQQChat)>0)) then begin tlQQChat := AnsiReplaceStr(tlQQChat, ’群 -’, ’我的文档’); tlQQChat := AnsiReplaceStr(tlQQChat, ’高级’ , ’’ ); SetWindowText(Handle, pchar(tlQQChat)); end; //MSN if pos(’ - 对话’, tlQQChat)>0 then begin tlQQChat := AnsiReplaceStr(tlQQChat, ’ - 对话’ , ’我的文档’); SetWindowText(Handle, pchar(tlQQChat)); end; end; Result :=True; end; //启动钩子 function EnableWheelHook: Boolean; stdcall; export; begin if hkQQChat=0 then begin hkQQChat := SetWindowsHookEx(WH_CBT, @TitleHookProc, Hinstance, 0); Result := True; end else Result := False; end; //卸载钩子 function DisableWheelHook: Boolean; stdcall; export; begin if hkQQChat<>0 then begin UnHookWindowsHookEx(hkQQChat); hkQQChat := 0; Result := True; end else Result := False; end; end. ==================================== |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者