0 Comments

Delphi编程实现QQ聊天窗口的修改

发布于:2014-04-26  |   作者:广州网站建设  |   已聚集:人围观

有人曾为公司不让用QQ、MSN等聊天工具而烦恼吗?看了下面的小程序你就会打消这种看法了。本文将教你在Delphi中编程实现QQ聊天窗口的修改。具体方法如下:

这次我用到的是一个系统钩子:WH_CBT。

广州网站建设,广州网站设计,广州网站制作,网站建设,网站设计,广州网站建设公司,广州网站设计公司,品牌网站建设

编写代码如下:


  1. library HookPrj;  
  2.  
  3. uses  
  4.  SysUtils,  
  5.  Classes,  
  6.  QQTitleHook in ’QQTitleHook.pas’;  
  7.  
  8.  exports  
  9. EnableWheelHook, DisableWheelHook;  
  10.  
  11. begin  
  12.  hkQQChat:= 0;  
  13. end.  
  14.  
  15.  
  16. unit QQTitleHook;  
  17.  
  18. interface 
  19.  
  20. uses  
  21.  Windows, Messages, SysUtils, Dialogs, CommCtrl, StrUtils;  
  22.  
  23. var  
  24.  hkQQChat: HHOOK;  
  25.  //聊天窗口的句柄  
  26.  hwQQChat: HWnd ;  
  27.  //聊天窗口的标题  
  28.  tlQQChat: string;  
  29.  //窗口类名  
  30.  clsName: string;  
  31.  buf: array [0..1024] of char;  
  32.  
  33.  const 
  34. //QQ聊天窗口的类名  
  35. csQQ = ’#32770’;  
  36.  
  37.  function TitleHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;  
  38.  function EnumWindowsTitleFunc(Handle: THandle; lParam: LPARAM): boolean ; stdcall;  
  39.  function EnableWheelHook : Boolean; stdcall; export;  
  40.  function DisableWheelHook: Boolean; stdcall; export;  
  41.  
  42.  implementation  
  43.    
  44.  //钩子的处理函数  
  45.  function TitleHookProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;  
  46.  begin  
  47. Result:= 0;  
  48. if Code<0 then  
  49. begin  
  50.  Result:= CallNextHookEx(hkQQChat, Code, wParam, lParam);  
  51.  Exit;  
  52. end  
  53. else 
  54.  if Code = HCBT_ACTIVATE then  
  55.  begin  
  56. //获取激活窗口的句柄,以及窗口类名,然后判断此窗口类名是否为#32770。  
  57. hwQQChat:= HWND(wParam);  
  58. GetClassName(hwQQChat, buf, 1024);  
  59. clsName:= string(buf);  
  60. if clsName = csQQ then  
  61. begin  
  62.  //如果窗口类名是#32770,则遍枚举所有窗口,并将窗口句柄传入  
  63.  //【这里仅仅做演示用,因为Windows中很多窗口的类名均为#32770,所以这样判断效率会很底,】  
  64.  //【有兴趣的朋友可以根据QQ聊天窗口的特性来增加判断条件,从而提高效率。】  
  65.  EnumWindows(@EnumWindowsTitleFunc, hwQQChat);  
  66. end;  
  67.  end;  
  68. end;  
  69.  
  70.  function EnumWindowsTitleFunc(Handle: THandle; lParam: LPARAM): boolean ; stdcall;  
  71.  begin  
  72. if (Handle = lParam) and boolean(GetWindowText(Handle, buf, 256)) then  
  73. begin  
  74.  //根据窗口句柄获得窗口标题  
  75.  tlQQChat:= string(buf);  
  76.  //然后判断标题中是否包含“与...聊天”等相关字符,如果包括则此窗口为QQ聊天窗口  
  77.  if ((pos(’与’, tlQQChat)>0) and (pos(’聊天中’, tlQQChat)>0)) then  
  78.  begin  
  79. //确定为聊天窗口后遍修改窗口标题。  
  80. tlQQChat := AnsiReplaceStr(tlQQChat, ’与’ , ’我的文档’);  
  81. tlQQChat := AnsiReplaceStr(tlQQChat, ’聊天中’, ’’ );  
  82. SetWindowText(Handle, pchar(tlQQChat));  
  83.  end;  
  84.  //【同上,这个地方大家可以自由控制,不仅仅局限在QQ、MSN等聊天窗口。】  
  85.  //【而且想要将标题改成什么也可以自由控制,如果能根据修改后的窗口图标来确定标题】  
  86.  //【比如通过修改将窗口图标替换成Delphi的图标,然后标题修改为Delphi7,谁还能看出破绽呢?】  
  87.  if ((pos(’群 -’, tlQQChat)>0) or (pos(’高级群 -’, tlQQChat)>0)) then  
  88.  begin  
  89. tlQQChat := AnsiReplaceStr(tlQQChat, ’群 -’, ’我的文档’);  
  90. tlQQChat := AnsiReplaceStr(tlQQChat, ’高级’ , ’’ );  
  91. SetWindowText(Handle, pchar(tlQQChat));  
  92.  end;  
  93.  //MSN  
  94.  if pos(’ - 对话’, tlQQChat)>0 then  
  95.  begin  
  96. tlQQChat := AnsiReplaceStr(tlQQChat, ’ - 对话’ , ’我的文档’);  
  97. SetWindowText(Handle, pchar(tlQQChat));  
  98.  end;  
  99. end;  
  100. Result :=True;  
  101.  end;  
  102.  
  103.  //启动钩子  
  104.  function EnableWheelHook: Boolean; stdcall; export;  
  105.  begin  
  106. if hkQQChat=0 then  
  107. begin  
  108.  hkQQChat := SetWindowsHookEx(WH_CBT, @TitleHookProc, Hinstance, 0);  
  109.  Result := True;  
  110. end  
  111. else 
  112.  Result := False;  
  113. end;  
  114.  
  115. //卸载钩子  
  116. function DisableWheelHook: Boolean; stdcall; export;  
  117. begin  
  118.  if hkQQChat<>0 then  
  119.  begin  
  120. UnHookWindowsHookEx(hkQQChat);  
  121. hkQQChat := 0;  
  122. Result := True;  
  123.  end  
  124.  else 
  125. Result := False;  
  126.  end;  
  127.  
  128. end.  

调试:运行程序后自动隐藏,当你提取QQ或者MSN的消息时会惊奇的发现聊天窗口的那个讨厌的“与XX聊天”的标题没有了,而标题换成了“我的文档”。这时如果你再将此聊天窗口的图标换成文档样式的图标,那么谁还能看出那就是你的聊天窗口。调用应用程序很简单,调用EnableWheelHook后隐藏就可以了,退出时DisableWheelHook就OK啦。

广州网站建设,广州网站设计,广州网站制作,网站建设,网站设计,广州网站建设公司,广州网站设计公司,品牌网站建设
 

程序仅仅提供大家一个思路,还有很多不完善的地方,希望有兴趣的朋友联系我,共同交流提高。

标签:
飞机