· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Keyboard hook

Посл.отвђт Сообщен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