📄 qqhook.dpr
字号:
library qqhook;
uses
Windows,messages,HookType;
var
MemFile: THandle;
Shared: PShared;
{撤消钩子过滤函数}
function UninstallHook: Boolean;
begin
Freelibrary(Shared^.Moudle);
Result := UnHookWindowsHookEx(Shared^.KeyHook) and UnHookWindowsHookEx(Shared^.ShellHook) and UnHookWindowsHookEx(Shared^.CallHook);
UnmapViewOfFile(Shared);
CloseHandle(memFile);
end;
function KeyboardProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
const
KeyPressMask = $80000000;
begin
if iCode < 0 then
Result := CallNextHookEx(Shared^.KeyHook,
iCode,
wParam,
lParam)
else begin
if ((lParam and KeyPressMask) = 0) and (GetKeyState(vk_Control) < 0) and (wparam = Ord('F'))
then
begin
Windows.MessageBox(0,'钩子已消除!','提示:',MB_ICONEXCLAMATION);
UninstallHook;
end;
if (wParam = VK_RETURN) and (GetKeyState(VK_CONTROL) < 0) and (lParam >= 0) then
begin
SendMessage(Shared^.MainWnd,WM_USERCMD, UC_WINDESTROY, GetForegroundWindow);
end;
Result := CallNextHookEx(Shared^.KeyHook,iCode,wParam,lParam);
end;
end;
function ShellProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
case iCode of
HSHELL_WINDOWCREATED:
PostMessage(Shared^.MainWnd,WM_USERCMD ,UC_WINCREATE,wParam);
end;
Result := CallNextHookEx(Shared^.ShellHook,iCode,wParam,lParam);
end;
function CallWndProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
type
Msg = ^CWPSTRUCT;
var
p : Msg;
begin
p := Msg(lParam);
//Shared^.hwd := GetParent(p^.hwnd);
//只对前台窗口进行处理
if (p^.message = WM_COMMAND) and (LOWORD(p^.wParam) = 1) then
begin
SendMessage(Shared^.MainWnd,WM_USERCMD, UC_WINDESTROY, GetForegroundWindow);
end;
Result := CallNextHookEx(Shared^.CallHook,iCode,wParam,lParam);
end;
//安装钩子
function InstallHook:Boolean;
begin
Shared^.Moudle:=GetModuleHandle(PChar('qqhook'));
Shared^.KeyHook := SetWindowsHookEx(WH_KEYBOARD,
@KeyboardProc,
Shared^.Moudle,
0);
Shared^.ShellHook := SetWindowsHookEx(WH_SHELL,
@ShellProc,
Shared^.Moudle,
0);
Shared^.CallHook := SetWindowsHookEx(WH_CALLWNDPROC,
@CallWndProc,
Shared^.Moudle,
0);
if Shared^.KeyHook = 0 then
begin
Result := False;
Exit;
end;
Result := true;
end;
procedure DllEntry(dwReason : integer);
begin
case dwReason Of
DLL_PROCESS_ATTACH:
begin
MemFile := OpenFileMapping(FILE_MAP_WRITE,False,HOOK_MEM_FILENAME);
if MemFile = 0 then
MemFile := CreateFileMapping($FFFFFFFF,nil,
PAGE_READWRITE,
0,
SizeOf(TShared),
HOOK_MEM_FILENAME);
Shared := MapViewOfFile(MemFile,
File_MAP_WRITE,
0,
0,
0);
end;
DLL_PROCESS_DETACH:
begin
//UninstallHook;
end;
else;
end;
end;
exports
InstallHook;
begin
DllProc := @DllEntry;
DllEntry(DLL_PROCESS_ATTACH);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -