SetWindowsHookEx не внедряет DLL

Все, что я пытаюсь сделать, это вставить мою DLL в некоторые другие программы (во время создания процесса) и заставить ее выполнять функцию DllMain.
К сожалению, независимо от того, какой код я пытаюсь, он никогда не работает.

Например, у меня есть этот код: http://pastebin.com/P4NzLb3X
В основном это просто использование SetWindowsHookEx для установки клавиатуры.
Однако проверка с помощью Process Hacker показывает, что DLL никогда не внедряется ни в один процесс. 🙁

Я уже весь день искал решение. Как я могу решить это?

0

Решение

Я решил проблему с помощью этих двух ссылок:

http://www.gamedev.net/topic/568401-problem-with-loading-dll—setwindowshookex/

Глобальный Keyhook на 64-битной Windows

3 вещи должны были быть исправлены:

  • Добавьте файл .def для DLL и используйте там экспорт, так как Visual Studio, очевидно, любит делать странные имена с extern "C" __declspec(dllexport) int — исправляет загрузку DLL на 32-битных процессах
  • добавлять CALLBACK атрибут для функции (extern "C" int CALLBACK meconnect(...)) — исправляет сбой, который происходит в 32-разрядных процессах после исправления, описанного выше.
  • Добавьте цикл сообщений в хост-процесс (процесс, который вызывает SetWindowsHookEx функция) вот так:

    MSG msg;
    while(1) {
    // Keep pumping...
    PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE);
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    Sleep(10);
    SHORT v = GetKeyState(VK_RETURN);
    bool pressed = (v & 0x8000) != 0;
    if(pressed)
    break;
    }
    

    это исправляет зависание в 64-битных процессах.

2

Другие решения


По вопросам рекламы [email protected]