간단한 키보드 훅

Delphi 2009. 4. 18. 19:30





LockSystem 함수 호출 한 번이면 끝남.
후킹 종료는 UnHookWindowsHookEx(HookID);
LLKeyHookFunc; 에 모든 걸 표현하면 됨.
 
 
 
// 키보드 훅 구조체
type
  PKeyHookStruct=^TKeyHookStruct;
  TKeyHookStruct=record
    vkCode: Integer;
    ScanCode: Integer;
    Flags: Integer;
    Time: Integer;
    dwExtraInfo: Integer;
  end;
 
 
// 훅 핸들
var
  HookID: HHOOK;
 
 
 
// 키 입력 필터링 함수 - 아래의 예는 Ctrl+ESC, Window Key, Alt+tab, Alt+ESC 를 씹어먹는다. 
////////////////////////////////////////////////////////////////////////////////
function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; kStrokeInfo: lParam): LResult; stdcall;
var PKeyHook: PKeyHookStruct;
begin
  // 키 정보 받아오기
  PKeyHook:=Ptr(kStrokeInfo);
 
  Result:=0;
  // 각종 키 입력검사
  if HookCode>=0 then begin
    // CTRL + ESC
    if ((PKeyHook.vkCode=VK_ESCAPE) and (GetAsyncKeyState(VK_CONTROL)<-32766)) then Result:=1
    // Window Key
    else if ((PKeyHook.vkCode=VK_LWIN) or (PKeyHook.vkCode=VK_RWIN)) then Result:=1
    // ALT + TAB
    else if ((pKeyHook.vkCode=VK_TAB) and (GetAsyncKeyState(VK_LMENU)<-32766)) then Result:=1
    // ALT + ESC
    else if ((PKeyHook.vkCode=VK_ESCAPE) and (GetAsyncKeyState(VK_LMENU)<-32766)) then Result:=1
  end;
  // 필터링 된 키가 아니라면 계속 진행
  if (Result=0) then Result:=CallNextHookEx(HookID, HookCode, KeyCode, kStrokeInfo);
end;
 
 
 
// 훅을 거는 함수
////////////////////////////////////////////////////////////////////////////////
procedure LockSystem;
const WH_KEYBOARD_LL=13;
begin
  HookID:=SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);
end;






Posted by bloodguy
,