123*_*ing 2 c++ winapi window-handles
想象一下,我有Firefox和我打开Firefox Start Page,然后我应该有一个标题为"Mozilla Firefox Start Page - Mozilla Firefox"的窗口.
我可以使用下面的代码找到窗口句柄
HWND hwnd = ::FindWindow(0, _T("Mozilla Firefox Start Page - Mozilla Firefox"));
Run Code Online (Sandbox Code Playgroud)
但我想要的是从窗口的exe文件的名称中找到窗口句柄
HWND hwnd = FindWindowFromExe(_T("firefox.exe"));//How to make this function?
Run Code Online (Sandbox Code Playgroud)
Windows Api是否具有FindWindowFromExe()等功能?如果没有,那么从其exe中查找窗口的最佳方法是什么?
谢谢阅读 :)
没有单一的API函数可以通过其拥有进程的文件名来查找窗口.您必须手动搜索它.
您可以使用EnumWindows()枚举所有顶级窗口,或使用FindWindow()/ FindWindowEx()查找/枚举特定类型的窗口.
对于每个窗口,您可以:
GetWindowThreadProcessId()获取拥有该窗口的进程IDOpenProcess()打开HANDLE该进程,然后GetModuleFileNameEx(),, GetProcessImageFileName()或QueryFullProcessImageName()查询进程的完整路径和文件名.要么
GetWindowModuleFileName()在窗口中查询创建它的模块的完整路径和文件名(假设预期的窗口是由实际的EXE创建的,而不是由EXE使用的DLL创建的).获得窗口的文件名后,可以将其与目标文件名进行比较.
| 归档时间: |
|
| 查看次数: |
6348 次 |
| 最近记录: |