⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hkproc.~pas

📁 罗小平<<delphi精要>>一书源码
💻 ~PAS
字号:
unit HKProc;

interface

uses
  Windows;      

var
  F: File of Char; 
  function EnableHotKeyHook: BOOL; stdcall;
  function DisableHotKeyHook: BOOL; stdcall;
  procedure HotKeyHookExit;

implementation

const
  _KeyPressMask = $80000000 ; 

var
  C: Char;
  ShiftDown,CapsDown: Boolean;
  hNextHookProc: HHook;

function KeyboardHookHandler(
  iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
  Result := 0;
  if iCode < 0 then
  begin
    Result := CallNextHookEx(hNextHookProc,iCode,wParam,lParam);
    Exit;
  end;
  if((lParam and _KeyPressMask) = 0) then //第32位为0,表示KeyDown状态
  begin
    ShiftDown := (GetKeyState($10) and _KeyPressMask) = _KeyPressMask;
    CapsDown := (GetKeyState($14) and 1) = 1;

    if wParam < 65 then
    begin
      if ShiftDown then
        C := Chr(wParam-16)
      else
        C := Chr(wParam);
    end else
    begin
      if wParam in [96..105] then
        C := Chr(wParam-48)  //数字键盘
      else if ShiftDown xor CapsDown then
        C := Chr(wParam)
      else
        C := Chr(wParam+32);
    end;
    Seek(F,FileSize(F));
    Write(F,C);
  end;
end;


function EnableHotKeyHook: BOOL; stdcall;
begin
  if hNextHookProc = 0 then
  begin
    ReWrite(F);
    hNextHookProc := SetWindowsHookEx(
      WH_KEYBOARD,KeyboardHookHandler,Hinstance,0);
  end;
  Result := hNextHookProc <> 0;
end;


function DisableHotKeyHook: BOOL; stdcall;
begin
  if hNextHookPRoc <> 0 then
  begin
    UnhookWindowshookEx(hNextHookProc);
    hNextHookProc := 0;
  end;
  Result := hNextHookPRoc = 0;
end;


procedure HotKeyHookExit;
begin
  DisableHotKeyHook;
  Close(F);
end;


end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -