Все, что я пытаюсь сделать, это вставить мою DLL в некоторые другие программы (во время создания процесса) и заставить ее выполнять функцию DllMain.
К сожалению, независимо от того, какой код я пытаюсь, он никогда не работает.
Например, у меня есть этот код: http://pastebin.com/P4NzLb3X
В основном это просто использование SetWindowsHookEx для установки клавиатуры.
Однако проверка с помощью Process Hacker показывает, что DLL никогда не внедряется ни в один процесс. 🙁
Я уже весь день искал решение. Как я могу решить это?
Я решил проблему с помощью этих двух ссылок:
http://www.gamedev.net/topic/568401-problem-with-loading-dll—setwindowshookex/
Глобальный Keyhook на 64-битной Windows
3 вещи должны были быть исправлены:
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-битных процессах.