如何在Python中获取主窗口句柄?
在Python中,我通过EnumWindows
来列举所有的顶层窗口,同时也用EnumProcesses
来列举所有的进程。
然后在我的Python脚本里,我把所有属于同一个进程ID(pid)的窗口句柄放到一个列表里(我是通过GetWindowThreadProcessId
来做到的)。
后来我发现了一件事:虽然我只打开了一个文本文件,但却有三个窗口句柄属于notepad.exe
。
这是为什么呢?
另外,我尝试通过SetForegroundWindow
把文本窗口设置为前景窗口,我把这三个窗口句柄都传给了这个函数,结果有两个能成功。
这又是怎么回事呢?
2 个回答
4
要调查这类事情,你最好的朋友就是Spy++,它是和多个版本的Visual Studio一起提供的,如果你能找到的话。
根据它的信息,记事本(notepad.exe)会创建三个主要窗口:
- 一个可见的主窗口,类名是“Notepad”,是重叠的。
- 一个隐藏的、不可用的弹出窗口,类名是“MSCTFIME UI”,标题是“M”。
- 另一个隐藏的、不可用的弹出窗口,类名是“IME”,标题是“Default IME”。
这两个隐藏的窗口是记事本内部使用的,用来实现输入法(IME),也就是用来输入复杂文字的界面。
很多程序会创建隐藏的主要窗口来处理各种事情。对于你的需求,你可以忽略这些隐藏窗口,只关注可见的窗口就可以了。
5
有时候,程序会创建一些看不见的窗口来完成自己的任务。你可以忽略这些窗口(可以使用 IsWindowVisible
函数来判断)。