六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Delphi中使用鉤子完成QQ聊天窗口的更改

[摘要]有人曾為公司不讓用QQ、MSN等聊天工具而煩惱嗎?看了下面的小程序你就會打消這種看法了。  當(dāng)初公司做校園一卡通的項目時,里面的機房客戶端需要用到系統(tǒng)的低級鍵盤鉤子WH_KEYBOARD_LL,這也是我第一次接觸到Windows中的Hook,因為WH_KEYBOARD_LL和其他鉤子不一樣,在De...
有人曾為公司不讓用QQ、MSN等聊天工具而煩惱嗎?看了下面的小程序你就會打消這種看法了。

  當(dāng)初公司做校園一卡通的項目時,里面的機房客戶端需要用到系統(tǒng)的低級鍵盤鉤子WH_KEYBOARD_LL,這也是我第一次接觸到Windows中的Hook,因為WH_KEYBOARD_LL和其他鉤子不一樣,在Delphi的Windows幫助以及windows.pas文件中都沒有定義,但microsoft的msdn中確有WH_KEYBOARD_LL的介紹,所以一路解決后就對Windows的系統(tǒng)鉤子產(chǎn)生了興趣。之后相繼做過鼠標(biāo)鉤子WH_MOUSE、低級鼠標(biāo)鉤子WH_MOUSE_LL以及消息鉤子WH_GETMESSAGE的小例子,都很有意思。

  這次我用到的是另外一個系統(tǒng)鉤子:WH_CBT。

  看了delphi中的幫助,發(fā)現(xiàn)CBTProc中有很多功能:

HCBT_ACTIVATE
HCBT_CREATEWND
HCBT_DESTROYWND
HCBT_MINMAX
HCBT_MOVESIZE
HCBT_SETFOCUS
HCBT_SYSCOMMAND

  (具體就不介紹了,看看幫助里寫的很清楚)

  隨后便開始試驗起來,最終完成了這個小程序。下面我簡單介紹一下:

  運行程序后自動隱藏,當(dāng)你提取QQ或者MSN的消息時會驚奇的發(fā)現(xiàn)聊天窗口的那個討厭的“與XX聊天”的標(biāo)題沒有了,而標(biāo)題換成了“我的文檔”。這時如果你再將此聊天窗口的圖標(biāo)換成文檔樣式的圖標(biāo),那么誰還能看出那就是你的聊天窗口呢?(更換圖標(biāo)的方法也很多,可以用程序,也可以用軟件直接修改QQ的資源文件,這部分我沒有做,這里只是提供大家一個思路,有興趣的朋友可以自己嘗試一下,呵呵)。

  下面將代碼帖出:

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 ;
 //聊天窗口的標(biāo)題
 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
 
 //鉤子的處理函數(shù)
 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,所以這樣判斷效率會很底,】
     //【有興趣的朋友可以根據(jù)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
   //根據(jù)窗口句柄獲得窗口標(biāo)題
   tlQQChat:= string(buf);
   //然后判斷標(biāo)題中是否包含“與...聊天”等相關(guān)字符,如果包括則此窗口為QQ聊天窗口
   if ((pos(’與’, tlQQChat)>0) and (pos(’聊天中’, tlQQChat)>0)) then
   begin
    //確定為聊天窗口后遍修改窗口標(biāo)題。
    tlQQChat := AnsiReplaceStr(tlQQChat, ’與’ , ’我的文檔’);
    tlQQChat := AnsiReplaceStr(tlQQChat, ’聊天中’, ’’ );
    SetWindowText(Handle, pchar(tlQQChat));
   end;
   //【同上,這個地方大家可以自由控制,不僅僅局限在QQ、MSN等聊天窗口。】
   //【而且想要將標(biāo)題改成什么也可以自由控制,如果能根據(jù)修改后的窗口圖標(biāo)來確定標(biāo)題】
   //【比如通過修改將窗口圖標(biāo)替換成Delphi的圖標(biāo),然后標(biāo)題修改為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.
====================================

  調(diào)用的應(yīng)用程序就很簡單了,調(diào)用EnableWheelHook后隱藏就可以了,退出時DisableWheelHook就OK啦。

  程序僅僅提供大家一個思路,還有很多不完善的地方,希望有興趣的朋友聯(lián)系我,共同交流提高。 


主站蜘蛛池模板: 中文字幕欧美日韩 | 日韩亚洲欧洲在线com91tv | 四虎永久在线精品 | 日韩精品免费在线视频 | 日韩在线视 | 一本久久精品一区二区 | 在线视频中文字幕 | 天天色天天插 | 人人干在线 | 日本欧美国产精品第一页久久 | 午夜视频在线免费播放 | 青娱乐欧美 | 香蕉视频一级 | 五月天丁香婷婷网 | 色综合久久中文字幕综合网 | 影音先锋久久 | 日韩国产欧美精品综合二区 | 亚洲国产综合精品中文字幕 | 色香欲综合成人免费视频 | 伊人影院综合网 | 四虎精品成人免费视频 | 日韩亚洲成a人片在线观看 日韩亚州 | 欧美怡春院一区二区三区 | 婷婷夜夜躁天天躁人人躁 | 添人人躁日日躁夜夜躁夜夜揉 | 日本一区二区视频在线 | 日韩精品亚洲专区在线观看 | 色视频线观看在线播放 | 午夜国产福利在线观看 | 色偷偷亚洲女人天堂观看欧 | 日韩性插 | 亚洲成人第一页 | 亚洲第一黄 | 亚洲男人的天堂在线播放 | 日韩免费视频一区 | 午夜手机福利视频 | 最近韩国日本高清免费观看 | 日本精品网站 | 亚洲在成人网在线看 | 四虎综合 | 日产乱码卡一卡2卡三卡四福利 |