在Windows95/98上,使用GetWindowModuleFileName可以很方便地实现这个功能。
UINT GetWindowModuleFileName( HWND hwnd, <---窗口句柄 LPTSTR lpszFileName, <---文件路径 UINT cchFileNameMax ); 但是到了Windows NT 4.0 and Windows 2000的时候,module句柄已经不能在进程间共享了,因此GetWindowModuleFileName也无法使用了。代替它的是PSAPI中的GetModuleFileNameEx 。 (参考: http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/ articles/Q228/4/69.asp&NoWebContent=1) 现在,当我们已知窗口句柄,可以按照下面的方法来得到对应的文件路径。 //先得到进程ID DWORD dwProcessID = 0; GetWindowThreadProcessId( hwnd, &dwProcessID ); //文件路径的Buffer wchar_t wsz_Filepath[MAX_PATH]; //由进程ID得到进程句柄 HANDLE hProcess = NULL; hProcess = OpenProcess( PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, dwProcessID); //由进程句柄得到文件路径(或者用GetModuleBaseName只取得文件和后缀名) GetModuleFileNameEx( hProcess, NULL, wsz_Filepath, MAX_PATH ); //使用文件路径...... / /关闭句柄 CloseHandle(hProcess); |
如何从窗口句柄得到与窗口关联的文件路径/文件名
最新推荐文章于 2023-03-14 20:00:55 发布