知识大全 Delphi中利用钩子实现QQ聊天窗口的修改

Posted

篇首语:闲散如酸醋,会软化精神的钙质;勤奋像火炬,能燃起智慧的火焰。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Delphi中利用钩子实现QQ聊天窗口的修改相关的知识,希望对你有一定的参考价值。

Delphi中利用钩子实现QQ聊天窗口的修改  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  你曾为公司不让用QQ MSN等聊天工具而烦恼吗?看了下面的小程序你就会打消这种看法了

  当初公司做校园一卡通的项目时 里面的机房客户端需要用到系统的低级键盘钩子WH_KEYBOARD_LL 这也是我第一次接触到Windows中的Hook 因为WH_KEYBOARD_LL和其他钩子不一样 在Delphi的Windows帮助以及windows pas文件中都没有定义 但microsoft的msdn中确有WH_KEYBOARD_LL的介绍 所以一路解决后就对Windows的系统钩子产生了兴趣 之后相继做过鼠标钩子WH_MOUSE 低级鼠标钩子WH_MOUSE_LL以及消息钩子WH_GETMESSAGE的小例子 都很有意思

  这次我用到的是另外一个系统钩子 WH_CBT

  看了delphi中的帮助 发现CBTProc中有很多功能

  HCBT_ACTIVATE  HCBT_CREATEWND  HCBT_DESTROYWND  HCBT_MINMAX  HCBT_MOVESIZE  HCBT_SETFOCUS  HCBT_SYSMAND

  (具体就不介绍了 看看帮助里写的很清楚)

  随后便开始试验起来 最终完成了这个小程序 下面我简单介绍一下

  运行程序后自动隐藏 当你提取QQ或者MSN的消息时会惊奇的发现聊天窗口的那个讨厌的 与XX聊天 的标题没有了 而标题换成了 我的文档 这时如果你再将此聊天窗口的图标换成文档样式的图标 那么谁还能看出那就是你的聊天窗口呢?(更换图标的方法也很多 可以用程序 也可以用软件直接修改QQ的资源文件 这部分我没有做 这里只是提供大家一个思路 有兴趣的朋友可以自己尝试一下 呵呵)

  下面将代码帖出

library HookPrj;

uses SysUtils  Classes  QQTitleHook in QQTitleHook pas ;

 exportsEnableWheelHook DisableWheelHook;

begin QQChat:= ;end unit QQTitleHook;

interface

uses Windows Messages SysUtils Dialogs CommCtrl StrUtils;

var QQChat: HHOOK; //聊天窗口的句柄 hwQQChat: HWnd ; //聊天窗口的标题 tlQQChat: string; //窗口类名 clsName: string; buf: array [ ] of char;

 const  //QQ聊天窗口的类名  csQQ = # ;

 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:= ;  if Code< then  begin   Result:= CallNextHookEx(QQChat Code wParam lParam);   Exit;  end  else   if Code = HCBT_ACTIVATE then   begin    //获取激活窗口的句柄 以及窗口类名 然后判断此窗口类名是否为#     hwQQChat:= HWND(wParam);    GetClassName(hwQQChat buf );    clsName:= string(buf);    if clsName = csQQ then    begin  //如果窗口类名是# 则遍枚举所有窗口 并将窗口句柄传入//【这里仅仅做演示用 因为Windows中很多窗口的类名均为# 所以这样判断效率会很低】//【有兴趣的朋友可以根据QQ聊天窗口的特性来增加判断条件 从而提高效率 】     EnumWindows(@EnumWindowsTitleFunc hwQQChat);    end;   end;  end;

 function EnumWindowsTitleFunc(Handle: THandle; lParam: LPARAM): boolean ; stdcall; begin  if (Handle = lParam) and boolean(GetWindowText(Handle buf )) then  begin   //根据窗口句柄获得窗口标题   tlQQChat:= string(buf);   //然后判断标题中是否包含 与 聊天 等相关字符 如果包括则此窗口为QQ聊天窗口   if ((pos( 与 tlQQChat)> ) and (pos( 聊天中 tlQQChat)> )) then   begin    //确定为聊天窗口后遍修改窗口标题     tlQQChat := AnsiReplaceStr(tlQQChat 与 我的文档 );    tlQQChat := AnsiReplaceStr(tlQQChat 聊天中 );    SetWindowText(Handle pchar(tlQQChat));   end;   //【同上 这个地方大家可以自由控制 不仅仅局限在QQ MSN等聊天窗口 】   //【且想要将标题改成什么也可以自由控制 如果能根据修改后的窗口图标来确定标题】   //【比如通过修改将窗口图标替换成Delphi的图标 然后标题修改为Delphi 谁还能看出破绽呢?哈哈】   if ((pos( 群 - tlQQChat)> ) or (pos( 高级群 - tlQQChat)> )) then   begin    tlQQChat := AnsiReplaceStr(tlQQChat 群 - 我的文档 );    tlQQChat := AnsiReplaceStr(tlQQChat 高级 );    SetWindowText(Handle pchar(tlQQChat));   end;   //MSN   if pos( 对话 tlQQChat)> then   begin    tlQQChat := AnsiReplaceStr(tlQQChat 对话 我的文档 );    SetWindowText(Handle pchar(tlQQChat));   end;  end;  Result :=True; end;

 //启动钩子 function EnableWheelHook: Boolean; stdcall; export; begin  if QQChat= then  begin   QQChat := SetWindowsHookEx(WH_CBT @TitleHookProc Hinstance );   Result := True;  end  else   Result := False;  end;

  //卸载钩子  function DisableWheelHook: Boolean; stdcall; export;  begin   if QQChat<> then   begin    UnHookWindowsHookEx(QQChat);    QQChat := ;    Result := True;   end   else    Result := False;   end;

  end

  调用的应用程序就很简单了 调用EnableWheelHook后隐藏就可以了 退出时DisableWheelHook就OK啦

cha138/Article/program/Delphi/201311/24742

相关参考

知识大全 qq聊天记录时间可以修改吗

qq聊天记录时间可以修改吗这个是没办法修改的,聊天记录是即定已存在的事实,而且是双方互动的模式,所以不能修改时间,当然如果你要是拿记录截图给别人的话,可以用P图软件,把时间修改掉,但要在QQ的记录里面

知识大全 我的qq聊天界面给别人发一个信息就关上了是怎么回事在哪设置

我的qq聊天界面给别人发一个信息就关上了是怎么回事在哪设置你打开聊天窗口左下角---发送左边---点一下箭头--把发送送消息后关闭窗口前面的勾去掉就OK了!望采纳!QQ聊天界面说完话就关了、怎么回事、

知识大全 怎样下载与安装qq聊天记录器

怎样下载与安装qq聊天记录器上百度,搜“QQ”,找一个窗口打开,下载。下载后点击下载下来的文件,一个一个按“下一步”,就安装好了再去申请账号,只要根据要求一个一个回答问题就可以了怎样卸载QQ聊天记录器

某单位公共服务窗口工作人员,为方便工作,常用QQ与服务对象沟通,并建立业务工作QQ群。某天,工作人员小张正在QQ上谈业务

某单位公共服务窗口工作人员,为方便工作,常用QQ与服务对象沟通,并建立业务工作QQ群。某天,工作人员小张正在QQ上谈业务,恰巧被前来办事的群众看到。群众随后向有关部门举报小张上班时间QQ聊天。单位领导

知识大全 如何在淘宝网上修改个人资料

如何在淘宝网上修改个人资料登陆“我的淘宝”-个人空间-修改资料如何在腾讯微博上修改个人资料首先登录自己的QQ聊天软件,然后点击界面的微博进入。打开腾讯微博以后,选择界面右上角的个人昵称中的设置。在基本

知识大全 用修改文件时间的方法来加密文件

 [摘要]  本文介绍了在Delphi中利用系统函数和WindowsAPI函数配合Delphi中的DataTimePicker组件来获取和修改文件的时间信息的方法以达到软件信息的简单加密  谈到文件加

知识大全 java聊天窗口的实现

  编写一数据报通信程序实现简单的聊天功能    聊天内容和输入文本分别为当前聊天的历史信息和当前要传送出去的聊天文本确定清空退出三个按钮分别实现发送当前聊天文本清空当前聊天文本和退出系统的功能imp

知识大全 在QQ聊天中对方突然发一个额字代表什么意思

在QQ聊天中对方突然发一个额字代表什么意思  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在QQ聊天中

知识大全 JS+CSS打造可拖动的聊天窗口层(兼容)

JS+CSS打造可拖动的聊天窗口层(兼容)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  <

知识大全 我的qq聊天页面一关就没有qq聊天记录了,而且聊天记录里也没有存,怎么回事

我的qq聊天页面一关就没有qq聊天记录了,而且聊天记录里也没有存,怎么回事?系统设置——安全设置——安全——消息记录安全,你看看你应该是勾选了“退出QQ时自动删除所有消息记录”。取消就好了。QQ聊天记