|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Май 5, 2003 19:58:56 Народ! Подскажите почему, когда вешаешь системный hook на клавиатуру в WinXP (создал DLL, где разместил hook-функцию, статистику собирает сервис ), он работает только в консольных приложениях ( например, запускаешь far, печатаешь что-нибудь - все hook`ится), а стоит предоставить фокус другому приложению - hook перестает работать?? Заранее благодарен. |
|
|
Дата: Май 6, 2003 10:31:13 atkachen Подскажите почему ... Покажите как Вы "вешаете системный hook на клавиатуру". Например, такой код ловит из console- и gui- application: [code] #define _WIN32_WINNT 0x0400 #include <windows.h> #include <stdio.h> LRESULT CALLBACK LowLevelKeyboardProc( int nCode, WPARAM wParam, LPARAM lParam) { if (HC_ACTION == nCode && (WM_KEYDOWN == wParam || WM_SYSKEYDOWN == wParam)) { FILE *f = fopen(TEXT("c:\\out.txt"), TEXT("a")); if (NULL != f) { KBDLLHOOKSTRUCT *p = (KBDLLHOOKSTRUCT *)lParam; fprintf(f, "%14s 0x%08X 0x%08X\n", WM_KEYDOWN == wParam ? "WM_KEYDOWN" : "WM_SYSKEYDOWN", p->vkCode, p->scanCode); fflush(f); fclose(f); } // if (NULL != f) } // if (HC_ACTION == nCode ... return CallNextHookEx(NULL, nCode, wParam, lParam); } #pragma argsused int WINAPI WinMain( HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int nCmdShow) { HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, hinstExe, 0); MessageBox(NULL, TEXT("Press Ok to stop logging"), TEXT("hi"), MB_OK); UnhookWindowsHookEx(hhkLowLevelKybd); return 0; } [/code] |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.053 |