WinAPI вынести hook в dll

313
26 сентября 2017, 07:22

Сделал глобальный хук на отлов нажатий некоторых клавиш. Но, не всегда срабатывает. Прочитал - надо вынести хук в 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;
}
Answer 1

Да, если Вы ставите глобальный хук (то есть на все запущенные потоки), или просто на "чужой" поток, то обработчик должен быть в DLL. Для установки хука нужно вызвать функцию SetWindowsHookEx ВОТ описание.

В приведенном коде не видно, где вы именно устанавливаете хук.

READ ALSO
Создание динамических блоков

Создание динамических блоков

Есть json такой структуры

393
Помогите разобраться с настройками Popup Semantic-UI

Помогите разобраться с настройками Popup Semantic-UI

Хочу установить настройки моего всплывающего окна следующим образом:

403
js. программная активация события input

js. программная активация события input

Есть input, на него подвешено событие input, все нормально работает когда пользователь вводит текст с клавиатуры, но вот при программном изменении...

283