Programming/MFC [이벤트] 다른 윈도우의 키보드 입력 가로채키 (키보드 후킹) 푸어맨 2017. 1. 31. 14:07 /////////////////////////////////////////////////////////////////// // global variable HHOOK g_hook = NULL; LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) { LPKBDLLHOOKSTRUCT pkbhs = (LPKBDLLHOOKSTRUCT)lParam; if (nCode == HC_ACTION) { if (pkbhs->vkCode == VK_F3) { DWORD dwFlags = (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) ? 0 : KEYEVENTF_KEYUP; if (dwFlags == 0) { CGifMakerDlg* pMainDlg = (CGifMakerDlg*)::AfxGetMainWnd(); // get main dialog pointer pMainDlg->OnBnClickedButtonRec(); return TRUE; } } // Input A-> B if (pkbhs->vkCode == 'A') { DWORD dwFlags = (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) ? 0 : KEYEVENTF_KEYUP; keybd_event('B', 0, dwFlags, 0); return TRUE; } } return CallNextHookEx(g_hook, nCode, wParam, lParam); } BOOL CGifMakerDlg::SetHook() { if (g_hook != NULL) UnHook(); g_hook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, (HINSTANCE)theApp.m_hInstance, NULL); return TRUE; } BOOL CGifMakerDlg::UnHook() { if (g_hook != NULL) { UnhookWindowsHookEx(g_hook); } return TRUE; }