我知道如何获取桌面的HWND:GetDesktopWindow() .
但我一直没能找到返回当前事件 的HWND 的函数Windows Explorer主窗口。
如何以安全可靠的方式获取当前事件的 Windows 资源管理器窗口的 HWND?
最佳答案
可以通过GetForegroundWindow()获取当前事件的窗口.然后你可以做 GetWindowThreadProcessId()获取一个 PID,然后您可以使用 OpenProcess() 将其转换为进程句柄(您需要 PROCESS_QUERY_INFORMATION 和 PROCESS_VM_READ 访问权限)然后您可以使用 GetModuleFileNameEx() 检查进程名称.不要记得用 CloseHandle() 关闭进程句柄.
这是我刚刚在记事本中写的一些代码。您可能会按照这些思路做一些事情。
DWORD lpFileName[MAX_PATH] = {0};
DWORD dwPID;
HANDLE hProcess;
HWND hwnd = GetForegroundWindow();
GetWindowThreadProcessId( hwnd, &dwPID );
hProcess = OpenProcess( PROCESS_QUERY_INFOMRATION | PROCESS_VM_READ, false, dwPID );
GetModuleFileNameEx( hProcess, NULL, lpFileName, _countof( lpFileName ) );
PathStripPath( lpFileName );
if( _tcscmp( _T("explorer.exe"), lpFileName ) == 0 ) {
_tprintf( _T("explorer window found") );
} else {
_tprintf( _T("foreground window was not explorer window") );
}
CloseHandle( hProcess );
要获取所有打开的资源管理器窗口,您可以使用 EnumWindows()您提供一个接收所有顶级窗口的回调。然后,您可以根据需要过滤掉,可能是进程名称(如上),也可能是类名 ( GetClassName() )。
关于c - 如何获取当前事件的 Windows 资源管理器窗口的 HWND?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6298907/