아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
탈퇴한 사용자
탈퇴한 사용자19.05.17

델파이에서 키보드 후킹을 하고싶은데요...

간단한 매크로 프로그램을 만들고 싶어서

키보드 후킹을 통해서 키보드 값을 알고싶습니다

예를 들어 F1키를 누를경우 그 값을 알고싶은데 어떻게 할까요??

55글자 더 채워주세요.
답변의 개수
2개의 답변이 있어요!
  • 빠른너구리257
    빠른너구리25719.05.17

    안녕하세요

    SetWindowsHookEx라는 함수를 통해 받아올 수 있습니다.

    SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);

    키보드 입력이 들어오면 LLKeyHookFunc을 실행시킵니다.

    아래는 LLKetHookFunc예제입니다.

    function LLKeyHookFunc(HookCode: Integer; KeyCode: wParam; kStrokeInfo: lParam): LResult; stdcall; var PKeyHook: PKeyHookStruct; idlestate: boolean; begin // 키 정보 받아오기 PKeyHook := Ptr(kStrokeInfo); if HookCode >= 0 then begin // F1일 경우 if (PKeyHook.vkCode = VK_F1) then begin // todo: Result := 1; end; idleState := true; end; // 필터링 된 키가 아니라면 계속 진행 Result := CallNextHookEx(HookID, HookCode, KeyCode, kStrokeInfo); end; ... HookID := SetWindowsHookEx(WH_KEYBOARD_LL, @LLKeyHookFunc, hInstance, 0);

    감사합니다.


  • 안녕하세요?

    델파이 키보드 후킹에 대해 문의주셨는데 간단한 예제로 통해 알려드리겠습니다

    밑에 예제는 F1키와 F2키를 누를경우 발생하는 이벤트 예제입니다

    TForm1 ... private { Private declarations } nHotKeyF1 : integer; nHotKeyF2 : integer; procedure WMHotKey(var Message: TWMHotKey); message WM_HOTKEY; procedure ScreenCapture(); ... procedure TForm1.FormCreate(Sender: TObject); begin nHotKeyF1 := GlobalAddAtom('DevelopistF1'); RegisterHotKey(Handle, nHotKeyF1, 0, VK_F1); nHotKeyF2 := GlobalAddAtom('DevelopistF2'); RegisterHotKey(Handle, nHotKeyF2, 0, VK_F2); end; procedure TForm1.FormDestroy(Sender: TObject); procedure RemoveHotKey(nHotKeyID : integer); begin UnregisterHotKey(Handle, nHotKeyID); GlobalDeleteAtom(nHotKeyID); end; begin if nHotKeyF1 <> 0 then RemoveHotKey(nHotKeyF1); if nHotKeyF2 <> 0 then RemoveHotKey(nHotKeyF2); end; procedure TForm1.WMHotKey(var Message: TWMHotKey); begin if Message.HotKey = nHotKeyF1 then begin //F1키 누를경우... end else if Message.HotKey = nHotKeyF2 then begin //F2키 누를경우... end;