Сделал глобальный хук на отлов нажатий некоторых клавиш. Но, не всегда срабатывает. Прочитал - надо вынести хук в dll(верно ли?). Как это реализуется? Вот функция хука:
LRESULT WINAPI KeyProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if ((nCode == HC_ACTION) && ((wParam == WM_SYSKEYDOWN) || (wParam == WM_KEYDOWN)))
{
//...
}
return CallNextHookEx(hCBTHook, nCode, wParam, lParam);
}
Хук устанавливаю так:
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
// create window
HINSTANCE hins;
hins = GetModuleHandle(NULL);
HHOOK hCBTHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyProc, hins, 0);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
WPARAM result = msg.wParam;
UnhookWindowsHookEx(hCBTHook);
return result;
}
Да, если Вы ставите глобальный хук (то есть на все запущенные потоки), или просто на "чужой" поток, то обработчик должен быть в DLL. Для установки хука нужно вызвать функцию SetWindowsHookEx
ВОТ описание.
В приведенном коде не видно, где вы именно устанавливаете хук.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Хочу установить настройки моего всплывающего окна следующим образом:
Есть input, на него подвешено событие input, все нормально работает когда пользователь вводит текст с клавиатуры, но вот при программном изменении...