如何使用getForegroundWindow函数获取模块

How to get ModuleBaseName using GetForegroundWindow function?

本文关键字:获取 模块 函数 getForegroundWindow 何使用      更新时间:2023-10-16

我可以从getForegroundWindow函数中获取处理。我想获得Basename手柄。因此,我使用了GetModelbasename功能。但是我想这个功能无法正常工作。

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

告诉我,有什么问题?

您做错了,这就是为什么它返回false和getlastror将返回error_invalid_handle(6)。

HWND WINAPI GetForegroundWindow(void);

将返回当前的前景窗口,并将返回hwnd类型的窗口句柄。

您可以这样做以检索应用程序的文件名:

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

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

编辑:他也想做其他事情。要检索另一个过程的路径,您必须使用一个过程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);
}