Gil*_*Raz 1 c c++ windows winapi
这是我正在编写的 dll 注入代码中的一段。我正在使用FindWindowA() 中定义的窗口过程获取 HWND INJ_PROC_NAME。问题是该函数总是返回 0,当我用GetLastError()它检查错误时也返回 0。我不知道是什么问题,因为错误代码没有给我关于错误的正确信息。
HWND Hwnd = FindWindowA(NULL, INJ_PROC_NAME);
if (Hwnd == NULL)
{
std::cout << "Couldn't find window named \"" << INJ_PROC_NAME << "\": error-"
<< GetLastError() << std::endl;
getchar();
return -1;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Couldn't find window named "notepad.exe": error-0
Run Code Online (Sandbox Code Playgroud)
这是一个已知的问题?我无法在 Microsoft 的文档或堆栈溢出中找到有关它的任何信息。我就是想不通这个...
编辑:显然,当我运行程序时,记事本是打开的。
错误很可能在std::cout.
尝试这个:
if (Hwnd == NULL)
{
DWORD error = GetLastError(); // first thing we retrieve the error
std::cout << "Couldn't find window named \"" << INJ_PROC_NAME << "\": error-"
<< error << std::endl;
getchar();
return -1;
}
Run Code Online (Sandbox Code Playgroud)
无论如何必须在失败后立即保存错误编号,如上所示。
但是,真正的原因FindWindow没有成功,是因为它是不是找的进程名,但对窗口标题是类似Untitled - Notepad。
否则,如果FindWindow没有找到窗口,尽管 Microsoft 文档假装是什么,最后一个错误实际上没有设置。
结论
使用FindWindow可能不是最好的方法,您应该按照Microsoft 文档 中的描述枚举进程。
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |