我所要做的就是将我的DLL注入其他程序(在进程创建时)并让它执行DllMain函数。 不幸的是,无论我尝试什么代码,它都无法运行。
例如,我有以下代码:http://pastebin.com/P4NzLb3X 基本上它只是使用SetWindowsHookEx来安装键盘钩子。 然而,使用Process Hacker进行检查会向我显示DLL实际上从未被注入到任何进程中。 :(
我已经搜索了整整一天的解决方案。我该如何解决这个问题?
答案 0 :(得分:2)
我在这两个链接的帮助下解决了这个问题:
http://www.gamedev.net/topic/568401-problem-with-loading-dll--setwindowshookex/
Global Keyhook on 64-Bit Windows
必须修复3件事:
extern "C" __declspec(dllexport) int
进行奇怪的名称修改 - 这修复了32位进程上的DLL加载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位进程中的冻结。