【发布时间】:2010-07-29 17:09:14
【问题描述】:
我正在尝试获取从 dll 加载 dll 的进程的句柄。
我的方法是: 在 DLL_PROCESS_ATTACH 我调用 EnumWindows(EnumWindowsProc,NULL);
我的 EnumWindowsProc 实现如下:
BOOL CALLBACK EnumWindowsProc(HWND hWnd, LPARAM lParam) {
if(GetCurrentProcessId() == GetWindowThreadProcessId(hWnd,NULL)){
MessageBox(hWnd,L"I loaded your dll!",L"it's me",MB_OK);
return TRUE;
}
return FALSE;
}
问题是 GetCurrentProcessId() == GetWindowThreadProcessId(hWnd,NULL) 永远不会为真(如果我将消息框调用放在 if 块之外一切正常,但它会为每个列出的窗口调用一次)。
还有其他方法可以直截了当吗?这种方法是完全错误的还是我只是错过了什么?
提前感谢
【问题讨论】:
-
GetWindowThreadProcessId 返回线程id,第二个参数获取进程id。 (注意:你不应该在 DllMain 中发疯,在该函数中实际上可以安全使用的函数只有少数)
-
我知道,但我的问题是我需要在 DLLmain 中做所有的事情,因为我的 dll 是在一个正在运行的进程中注入的。
标签: c++ windows winapi dll code-injection