Как правильно создать локальный хук используя c++ dll?

106
09 июня 2021, 21:00

Здравствуйте уважаемые господа программисты. Сразу скажу - я новичок в C++ и многого не знаю, по этому не кидайте тапками.

У меня есть задача - сделать локальный хук мыши который работает только в процессе в который был произведен инжект моей DLL созданной на C++. Под этим я подразумеваю что данный хук будет работать во всех окнах которые принадлежат этому процессу.

Я пытался вникать и читать документацию, гуглить, но мне попадались лишь вопросы на эту тему, в них ничего не работало.

Как я понял - данный хук делается при помощи SetWindowsHookEx. Ниже находится пример моего кода который у меня получился, но он делает глобальный хук, а еще как-то криво работает ( из-за него виснет окна которые принадлежат процессу в который был произведен инжект ).

HHOOK MouseHook;
LRESULT CALLBACK MouseProc(int code, WPARAM wParam, LPARAM lParam)
{
    MOUSEHOOKSTRUCTEX* mhs = (MOUSEHOOKSTRUCTEX*)lParam;
    if (wParam == WM_RBUTTONUP)
    {
        MessageBoxA(0, "test", "test", MB_OK | MB_SYSTEMMODAL);
    }
    return CallNextHookEx(MouseHook, code, wParam, lParam);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD _reason, DWORD lpReserved)
{
    if (_reason == DLL_PROCESS_ATTACH)
    {
        MouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseProc, NULL, NULL);
        MSG message;
        while (GetMessage(&message, NULL, 0, 0))
        {
            TranslateMessage(&message);
            DispatchMessage(&message);
        }
    }
    return true;
}

Объясните пожалуйста как работает данный код и как сделать правильно сделать локальный хук.

READ ALSO
С++. Проблема со всем. Visual Studio Code

С++. Проблема со всем. Visual Studio Code

Только начал программировать на C++, в итоге ничего не понять, как начатьПопытался установить на Visual Studio Code и C++, и code runner, в итоге написал простенькую...

189
Помогите с разбором задачи на рекурсию

Помогите с разбором задачи на рекурсию

Между городом A и гоордом B проложена единственная дорога, на которой построено N остановочных пунктовОбычный автобусный маршрут из A в B предусматривает...

106
c++ if в switch с использованием string

c++ if в switch с использованием string

if string обработать может, а switch не можетно использовать if, как-то не красиво

93