gpt4 book ai didi

c++ - FindWindowA() 返回 0,当我使用 GetLastError() 检查错误代码时,它也是 0 (ERROR_SUCCESS)

转载 作者:行者123 更新时间:2023-12-02 09:49:33 26 4
gpt4 key购买 nike

这是我正在编写的 dll 注入(inject)代码的一部分。
我正在使用 FindWindowA()INJ_PROC_NAME 中定义的窗口进程获取 HWND .
问题是函数总是返回 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;
}

这是输出:
Couldn't find window named "notepad.exe": error-0

这是一个已知的问题?我无法在 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;
}

无论如何都必须在失败后立即保存错误号,如上所示。

但真正的原因 FindWindow不成功是因为它不是在寻找进程名称,而是寻找类似于 Untitled - Notepad 的窗口标题。 .

否则如果 FindWindow没有找到窗口,最后一个错误确实没有设置,尽管 Microsoft 文档假装了什么。

结论

使用 FindWindow可能不是最好的方法,您应该按照 in this Microsoft documentation 的描述枚举进程.

关于c++ - FindWindowA() 返回 0,当我使用 GetLastError() 检查错误代码时,它也是 0 (ERROR_SUCCESS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61339752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com