Created
April 3, 2014 10:53
-
-
Save freeonterminate/9952319 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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