微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 GetWindowThreadProcessId 函数不适用于命令行?

如何解决为什么 GetWindowThreadProcessId 函数不适用于命令行?

当我尝试使用 GetwindowThreadProcessId 函数时,它失败并使用 GetLastError 函数并将其转换为显示“参数不正确”的字符串。它发现窗口很好,我尝试将 HWND 参数更改为打开的 .txt 文件,它似乎工作正常,所以我认为问题出在命令行上,没有其他问题。这是我的代码

HWND win = FindWindowA(NULL,(LPCSTR)"C:\\WINDOWS\\system32\\cmd.exe");
        LPSTR str;
        str = new CHAR[50];
        GetwindowTextA(win,str,49);
        cout << str;
        LPDWORD * pid;
        pid = new LPDWORD();
        DWORD cmdthread = GetwindowThreadProcessId(win,*pid);
        cout << GetLastErrorAsstring();

它似乎适用于任何非 Windows 命令提示符,但我需要使用命令提示符。有什么解决办法吗,还是我做错了什么?

解决方法

您将无效的 DWORD* 指针传递给 GetWindowThreadProcessId() 的第二个参数。试试这个:

HWND win = FindWindowA(NULL,"C:\\WINDOWS\\system32\\cmd.exe");
if (win != NULL)
{
    // this part is redundant,since you just did a search for
    // the HWND by its window text,so you already know what
    // the text is...
    char str[50] = {};
    GetWindowTextA(win,str,49);
    cout << str;
    //

    DWORD pid = 0;
    DWORD tid = GetWindowThreadProcessId(win,&pid);
    if (tid != 0)
        cout << "Thread ID: " << tid << " Process ID: " << pid;
    else
        cout << GetLastErrorAsString();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。