如何使用GetForegroundWindow函数获取ModuleBaseName?

时间:2017-09-09 06:16:38

标签: c++ winapi

我可以从GetForegroundWindow函数获取句柄。我想获得BaseName 手柄所以我使用了GetModelBaseName函数。但我想这个功能不能正常工作。

TCHAR TitleName[MAX_PATH] = TEXT("");
HANDLE hFirst = GetForegroundWindow();
GetModuleBaseName(hFirst, NULL, TitleName, MAX_PATH);
_tprintf(TEXT("%s \n"), TitleName);

告诉我,问题是什么?

1 个答案:

答案 0 :(得分:1)

你做错了,这就是为什么它返回false而GetLastError将返回ERROR_INVALID_HANDLE(6)。

HWND WINAPI GetForegroundWindow(void);

将返回当前前景窗口并返回类型为HWND的窗口句柄。

您可以执行此操作以检索应用程序的文件名:

TCHAR szName[MAX_PATH];
GetModuleBaseName(GetCurrentProcess(), GetModuleHandle(NULL), szName, MAX_PATH);

此外,您还可以使用GetModuleFileName或GetMappedFileName来检索应用程序的完整路径

编辑:他也想做其他事情。要检索另一个进程的路径,您必须使用进程ID打开该进程。例如,如果9912是Chrome的进程ID,那么您可以执行以下代码来检索其路径

HANDLE process = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, 9912);
if (process)
{
    char file_path[MAX_PATH];
    if (::GetModuleFileNameEx(process, nullptr, file_path, MAX_PATH))
    {
        std::cout << file_path << std::endl;
    }
    else
    {
        std::cout << "Error retrieving path" << std::endl;
    }

    ::CloseHandle(process);
}