當初公司做校園一卡通的項目時
這次我用到的是另外一個系統鉤子
看了delphi中的幫助
HCBT_ACTIVATE
HCBT_CREATEWND
HCBT_DESTROYWND
HCBT_MINMAX
HCBT_MOVESIZE
HCBT_SETFOCUS
HCBT_SYSCOMMAND
(具體就不介紹了
隨後便開始試驗起來
運行程序後自動隱藏
下面將代碼帖出
library HookPrj;
uses
SysUtils
Classes
QQTitleHook in
exports
EnableWheelHook
begin
hkQQChat:=
end
unit QQTitleHook;
interface
uses
Windows
var
hkQQChat: HHOOK;
//聊天窗口的句柄
hwQQChat: HWnd ;
//聊天窗口的標題
tlQQChat: string;
//窗口類名
clsName: string;
buf: array [
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<
begin
Result:= CallNextHookEx(hkQQChat
Exit;
end
else
if Code = HCBT_ACTIVATE then
begin
//獲取激活窗口的句柄
hwQQChat:= HWND(wParam);
GetClassName(hwQQChat
clsName:= string(buf);
if clsName = csQQ then
begin
//如果窗口類名是#
//【這裡僅僅做演示用
//【有興趣的朋友可以根據QQ聊天窗口的特性來增加判斷條件
EnumWindows(@EnumWindowsTitleFunc
end;
end;
end;
function EnumWindowsTitleFunc(Handle: THandle; lParam: LPARAM): boolean ; stdcall;
begin
if (Handle = lParam) and boolean(GetWindowText(Handle
begin
//根據窗口句柄獲得窗口標題
tlQQChat:= string(buf);
//然後判斷標題中是否包含
if ((pos(
begin
//確定為聊天窗口後遍修改窗口標題
tlQQChat := AnsiReplaceStr(tlQQChat
tlQQChat := AnsiReplaceStr(tlQQChat
SetWindowText(Handle
end;
//【同上
//【且想要將標題改成什麼也可以自由控制
//【比如通過修改將窗口圖標替換成Delphi的圖標
if ((pos(
begin
tlQQChat := AnsiReplaceStr(tlQQChat
tlQQChat := AnsiReplaceStr(tlQQChat
SetWindowText(Handle
end;
//MSN
if pos(
begin
tlQQChat := AnsiReplaceStr(tlQQChat
SetWindowText(Handle
end;
end;
Result :=True;
end;
//啟動鉤子
function EnableWheelHook: Boolean; stdcall; export;
begin
if hkQQChat=
begin
hkQQChat := SetWindowsHookEx(WH_CBT
Result := True;
end
else
Result := False;
end;
//卸載鉤子
function DisableWheelHook: Boolean; stdcall; export;
begin
if hkQQChat<>
begin
UnHookWindowsHookEx(hkQQChat);
hkQQChat :=
Result := True;
end
else
Result := False;
end;
end
調用的應用程序就很簡單了
程序僅僅提供大家一個思路
From:http://tw.wingwit.com/Article/program/Delphi/201311/24742.html