GetModuleFileNameEx返回0并且GetLastError返回溢出错误。我究竟做错了什么?

时间:2017-12-01 23:56:10

标签: c++ windows

所以今天我决定用windows.h搞砸了一下,我想练习一点练习,这是我写的代码,但它给了我头疼。

它一直返回0,所以没有名称被传递到ExecName,如果我用GetLastError()查找,我得到的错误是溢出错误。

我尝试了不同的方法获取可执行文件'名字,但它总是相同。

#include <iostream>
#include <Windows.h>
#include <Psapi.h>

TCHAR* ExeToFind = "Discord.exe";

BOOL CALLBACK CB_EW(
    _In_ HWND   hwnd,
    _In_ LPARAM lParam
)
{
    TCHAR ExecName[MAX_PATH];
    DWORD ProcesID = NULL;

    GetWindowThreadProcessId(hwnd, &ProcesID);
    HANDLE handle = OpenProcess(NULL, false, ProcesID);
    if (GetModuleFileNameEx(handle, NULL, ExecName, MAX_PATH) == 0) {
        std::cout << "Error " << GetLastError();
        return true;
    }

    //GetWindowText(hwnd, ExecName, GetWindowTextLength(hwnd)+1);
    //GetProcessImageFileName(hwnd, ExecName, MAX_PATH);


    std::cout << ExecName;
    if (ExecName == ExeToFind) {

        std::cout << "Here it is\n";
        return false;
    }
    else {
        std::cout << "next\n";
        return true;
    }
}


int main()
{
    //HWND hWnd = FindWindow(0,0);

    EnumWindows(CB_EW, NULL);

    while (true) {

    }
    return 0;
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

这是一个权限问题,而不是使用NULL作为OpenProcess的访问权限,我使用MAXIMUM_ALLOWED并且它有效