如何从窗口句柄得到与窗口关联的文件路径/文件名


在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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值