C++ GetLastError()将0返回给失败的窗口句柄
我制作了一个访问游戏的程序。 我的程序正在使用C++ GetLastError()将0返回给失败的窗口句柄,c++,windows,C++,Windows,我制作了一个访问游戏的程序。 我的程序正在使用FindWindow功能查找游戏窗口,如果FindWindow失败,程序将打印一条错误消息 我的问题是GetLastError函数总是返回0 (“操作已成功完成。”) 为什么它总是返回0 示例: #include <iostream> #include <Windows.h> void GameAccess(LPCSTR winname) { HWND GameWindow = FindWindowA(NULL,
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;
}
#包括
#包括
无效游戏访问(LPCSTR winname)
{
HWND GameWindow=FindWindowA(NULL,winname);
如果(GameWindow==FALSE){
std::cout您想要这个:
HWND GameWindow = FindWindowA(NULL, winname);
if (GameWindow == NULL) { // compare to NULL
auto errorcode = GetLastError(); // 1st thing to do
std::cout << "Failed to FindWindow & Error Code: " << errorcode;
Sleep(3000);
exit(1);
}
else {
DWORD procID;
GetWindowThreadProcessId(GameWindow, &procID);
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
if (handle == NULL) { // compare handle to NULL, not procID to FALSE
auto errorcode = GetLastError(); // 1st thing to do
std::cout << "procID Failed & Error Code: " << errorcode;
Sleep(3000);
exit(1);
}
}
HWND GameWindow=FindWindowA(NULL,winname);
如果(GameWindow==NULL){//比较NULL
auto errorcode=GetLastError();//要做的第一件事
std::cout您想要这个:
HWND GameWindow = FindWindowA(NULL, winname);
if (GameWindow == NULL) { // compare to NULL
auto errorcode = GetLastError(); // 1st thing to do
std::cout << "Failed to FindWindow & Error Code: " << errorcode;
Sleep(3000);
exit(1);
}
else {
DWORD procID;
GetWindowThreadProcessId(GameWindow, &procID);
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
if (handle == NULL) { // compare handle to NULL, not procID to FALSE
auto errorcode = GetLastError(); // 1st thing to do
std::cout << "procID Failed & Error Code: " << errorcode;
Sleep(3000);
exit(1);
}
}
HWND GameWindow=FindWindowA(NULL,winname);
如果(GameWindow==NULL){//比较NULL
auto errorcode=GetLastError();//要做的第一件事
std::你能在Windows 95上运行吗?@TanveerBadar不,为什么?与FindWindowEx()相比,你为什么要执行FindWindowA()
?除了扩展功能外,它还将根据编译所依据的字符集绑定到正确的ASCII与Unicode。在调用任何其他函数(和运算符)之前,您需要检索最后一个错误。您还应该使用if(handle==NULL)
而不是if(procID==FALSE)
(我怀疑这些来自于将非常常见的if(!x)
转换为if(x==FALSE)
,但它们并没有说同样的话。)你在Windows 95上运行吗?@TanveerBadar不,为什么?为什么你要做FindWindowA()
而不是FindWindowEx()
?除了扩展功能外,它还将根据编译所依据的字符集绑定到正确的ASCII与Unicode。在调用任何其他函数(和运算符)之前,您需要检索最后一个错误。您还应该使用if(handle==NULL)
而不是if(procID==FALSE)
(我怀疑这些来自于将非常常见的if(!x)
转换为if(x==FALSE)
,但它们实际上说的不是同一件事。)@nakE我可以复制这个。看起来Microsoft文档是错误的。这不是第一次发生。顺便说一句,else
部分还有其他不相关的问题。嘿!你编辑过你的帖子吗?你说的“不相关的问题”是什么意思,你能解释一下吗?@nakE是的,我显然编辑了答案,看一下else
部分和我添加的注释,并将其与原始代码进行比较。你试过了吗?我仍然得到0作为错误代码。@nakE阅读了我的第一条注释。我也得到了0。我想Microsoft文档关于GetLastError()的内容是错误的
@nakE我可以复制这个。看起来Microsoft文档是错误的。这不是第一次发生。顺便说一句,其他部分中还有其他不相关的问题。嘿!你编辑了你的帖子吗?你说的“不相关的问题”是什么意思,你能解释一下吗?@nakE是的,我显然编辑了答案,看看其他部分和我添加的注释,并将其与原始代码进行比较。你试过了吗?我仍然得到0作为错误代码。@nakE阅读了我的第一条注释。我也得到了0。我想Microsoft文档中关于GetLastError()
的内容是错误的。