【发布时间】:2019-12-13 11:03:56
【问题描述】:
我制作了一个访问游戏的程序。
我的程序正在寻找带有FindWindow函数的游戏窗口,如果FindWindow失败,程序会打印一条错误消息。
我的问题是 GetLastError 函数总是返回 0。
("操作成功完成。")
- 为什么总是返回 0?
示例:
#include <iostream>
#include <Windows.h>
void GameAccess(LPCSTR winname)
{
HWND GameWindow = FindWindowA(NULL, winname);
if (GameWindow == FALSE) {
std::cout << "Failed to FindWindow & Error Code: " << GetLastError();
Sleep(3000);
exit(1);
}
else {
DWORD procID;
GetWindowThreadProcessId(GameWindow, &procID);
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
if (procID == FALSE) {
std::cout << "procID Failed & Error Code: " << GetLastError();
Sleep(3000);
exit(1);
}
}
}
int main()
{
GameAccess("myGame");
return 0;
}
【问题讨论】:
-
您在 Windows 95 上运行吗?
-
@TanveerBadar 不,为什么?
-
与
FindWindowEx()相比,您为什么使用FindWindowA()?除了扩展功能外,它还会根据您编译的字符集绑定到正确的字符集,从而为您处理 ASCII 与 Unicode。 -
您需要在调用任何其他函数之前检索最后一个错误(而
operator<<是一个函数)。 -
您还应该使用
if (handle == NULL)而不是if (procID == FALSE)。 (我怀疑这些来自将非常常见的if (!x)翻译成if (x == FALSE),但它们并没有真正说同样的话。)