我可以从GetForegroundWindow函数获取句柄。我想获得BaseName 手柄所以我使用了GetModelBaseName函数。但我想这个功能不能正常工作。
TCHAR TitleName[MAX_PATH] = TEXT("");
HANDLE hFirst = GetForegroundWindow();
GetModuleBaseName(hFirst, NULL, TitleName, MAX_PATH);
_tprintf(TEXT("%s \n"), TitleName);
告诉我,问题是什么?
答案 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);
}