Все, что я пытаюсь сделать, это загрузить мою DLL в некоторые другие программы (во время создания процесса) и заставить ее выполнить функцию DllMain. К сожалению, независимо от того, какой код я пытаюсь, он никогда не работает.
Например, у меня есть этот код: http://pastebin.com/P4NzLb3X В основном, это просто использование SetWindowsHookEx для установки клавиатуры. Однако проверка с помощью процесса 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-битных процессах.
NULL
возвращаемый GetProcAddress
. Почему ты не упомянул это? Обратите внимание, что первые две проблемы не были в коде, который вы опубликовали.