델파이에서 키보드 후킹을 하고싶은데요...
간단한 매크로 프로그램을 만들고 싶어서
키보드 후킹을 통해서 키보드 값을 알고싶습니다
예를 들어 F1키를 누를경우 그 값을 알고싶은데 어떻게 할까요??
55글자 더 채워주세요.
2개의 답변이 있어요!
안녕하세요
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;