c++ - GetLastError() 返回 0 到失败的窗口句柄

标签 c++ windows

我制作了一个访问游戏的程序。 我的程序使用 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;
}

最佳答案

你想要这个:

  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);
        }
    }

您还需要关闭 OpenProcess 返回的句柄如果它在某个时候不是 NULL。

std::cout <<天知道错误代码是什么。

关于c++ - GetLastError() 返回 0 到失败的窗口句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59321280/

相关文章:

c++ - 没有 WinMain 的 winapi 入口点

c++ - unordered_map 和虚拟模板

C++ 删除所有文件和子文件夹但保留目录本身

windows - GIT 日志或提交监视器

linux - 为 Qt 项目创建可执行文件

windows - 如何在 Windows 2012 Server 任务计划程序中提取所有计划作业的列表?

c++ - 在 C++ 中对两个用户定义的对象进行类型转换——可能吗?

c++ - 线程安全队列

c++ - 为什么局部变量不隐藏数组定义中的全局变量

使用 Delphi 的 Windows 上次启动日期和时间