Skip to content

Instantly share code, notes, and snippets.

@freeonterminate
Created April 3, 2014 10:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save freeonterminate/9952319 to your computer and use it in GitHub Desktop.
Save freeonterminate/9952319 to your computer and use it in GitHub Desktop.
unit uKeyHook;
interface
uses
Winapi.Windows;
type
TKeyHookEvent = procedure(const iVKKey, iState: DWORD) of object;
(*
■iVKKey
仮想キーコード
■iState のビット(MSDN より抜粋)
0~15 繰り返し回数を示します。
このビットは、 ユーザーがキーを押し続けたときに繰り返される
キーストロークの回数になります。
16~23 走査コードを示します。
このビットは、 相手先ブランド供給 (OEM) に依存します。
24 キーがファンクション キーや数値キーのような拡張キーかどうかを示します。
このビットは、 キーが拡張キーの場合は1になり、 それ以外の場合は0になります。
25~28 予約されています。
29 コンテキスト コードを示します。
このビットは、 Altキーが押された場合は1になり、
それ以外の場合は0になります。
30 以前のキーの状態を示します。
このビットは、 メッセージが送られる前にキーが押されていた場合は1になり、
キーが離されていた場合は0になります。
31 遷移状態を示します。
このビットは、 キーが押されている状態の場合は0になり、
離されている状態の場合は1になります。
*)
procedure Install(const iEvent: TKeyHookEvent);
procedure Uninstall;
implementation
var
GHookHandle: HHOOK;
GHandler: TKeyHookEvent;
function KeyboardProc(
iNCode: Integer;
iWParam: WPARAM;
iLParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(GHookHandle, iNCode, iWParam, iLParam);
if (iNCode < 0) then
Exit;
GHandler(iWParam, iLParam);
end;
procedure Install(const iEvent: TKeyHookEvent);
begin
GHandler := iEvent;
GHookHandle :=
SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, 0, GetCurrentThreadID);
end;
procedure Uninstall;
begin
if (GHookHandle <> 0) then
UnhookWindowsHookEx(GHookHandle);
GHookHandle := 0;
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment