본문 바로가기
IT/델파이

델파이 키보드 후킹 예제

by 불멸남생 2024. 7. 31.

델파이는 강력한 개발 도구로, 다양한 기능을 구현할 수 있습니다. 그 중 하나가 바로 키보드 후킹입니다. 이 글에서는 델파이로 전역 키보드 후킹을 구현하는 방법에 대해 자세히 설명하겠습니다.

키보드 후킹이란?

키보드 후킹은 키보드 입력을 가로채고, 이를 프로그램이 처리할 수 있도록 하는 기술입니다. 이를 통해 특정 키 조합을 감지하여 특정 동작을 수행하게 할 수 있습니다. 예를 들어, SHIFT + F2 키를 눌렀을 때 특정 창을 항상 맨 위에 위치시키거나, SHIFT + F3 키를 눌렀을 때 해당 창을 원래 위치로 되돌릴 수 있습니다.

델파이에서 키보드 후킹 구현하기

델파이에서 키보드 후킹을 구현하려면 몇 가지 중요한 절차가 필요합니다. 여기서는 전역 키보드 후킹을 예로 들어 설명하겠습니다.

반응형

후킹 구조체 정의

먼저, 후킹에 사용할 구조체를 정의합니다. 이 구조체는 키보드 이벤트 정보를 저장하는 역할을 합니다.

type
  PKeyHookStruct = ^TKeyHookStruct;
  TKeyHookStruct = record
    vkCode: Integer;
    ScanCode: Integer;
    Flags: Integer;
    Time: Integer;
    dwExtraInfo: Integer;
  end;
반응형

후킹 함수 정의

키보드 후킹 함수는 키보드 입력을 가로채고, 이를 처리합니다. 다음은 키보드 후킹 함수의 예입니다.

function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; kStrokeInfo: lParam): LResult; stdcall;
var
  PKeyHook: PKeyHookStruct;
begin
  PKeyHook := Ptr(kStrokeInfo);

  if HookCode >= 0 then
  begin
    if (PKeyHook.vkCode = VK_F2) and (GetAsyncKeyState(VK_SHIFT) < -32766) then
    begin
      Form1.FormStyle := fsStayOnTop;
      Result := 1;
      Exit;
    end
    else if (PKeyHook.vkCode = VK_F3) and (GetAsyncKeyState(VK_SHIFT) < -32766) then
    begin
      Form1.FormStyle := fsNormal;
      Result := 1;
      Exit;
    end;
  end;

  Result := CallNextHookEx(HookID, HookCode, KeyCode, kStrokeInfo);
end;
반응형

후킹 시작 및 종료 함수

후킹을 시작하고 종료하는 함수도 필요합니다. 다음은 해당 함수들의 예제입니다.

procedure KeybdHook;
const
  WH_KEYBOARD_LL = 13;
begin
  HookID := SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);
end;

procedure KeybdUnhook;
begin
  UnHookWindowsHookEx(HookID);
end;
반응형

OnCreate 및 OnClose 이벤트 처리

후킹을 시작하고 종료하기 위해 OnCreate 및 OnClose 이벤트에서 해당 함수를 호출합니다.

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeybdHook;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  KeybdUnhook;
end;
반응형

결론

델파이로 키보드 후킹을 구현하는 것은 비교적 간단합니다. 이 글에서는 전역 키보드 후킹을 구현하는 방법과, 이를 응용한 다양한 예제를 살펴보았습니다. 이러한 기술을 통해 사용자 입력을 효과적으로 처리하고, 프로그램의 기능성을 크게 향상시킬 수 있습니다.

반응형