如何在Python中获取主窗口句柄?

5 投票
2 回答
5161 浏览
提问于 2025-04-16 23:40

在Python中,我通过EnumWindows来列举所有的顶层窗口,同时也用EnumProcesses来列举所有的进程。

然后在我的Python脚本里,我把所有属于同一个进程ID(pid)的窗口句柄放到一个列表里(我是通过GetWindowThreadProcessId来做到的)。

后来我发现了一件事:虽然我只打开了一个文本文件,但却有三个窗口句柄属于notepad.exe

这是为什么呢?

另外,我尝试通过SetForegroundWindow把文本窗口设置为前景窗口,我把这三个窗口句柄都传给了这个函数,结果有两个能成功。

这又是怎么回事呢?

2 个回答

4

要调查这类事情,你最好的朋友就是Spy++,它是和多个版本的Visual Studio一起提供的,如果你能找到的话。

根据它的信息,记事本(notepad.exe)会创建三个主要窗口:

  1. 一个可见的主窗口,类名是“Notepad”,是重叠的。
  2. 一个隐藏的、不可用的弹出窗口,类名是“MSCTFIME UI”,标题是“M”。
  3. 另一个隐藏的、不可用的弹出窗口,类名是“IME”,标题是“Default IME”。

这两个隐藏的窗口是记事本内部使用的,用来实现输入法(IME),也就是用来输入复杂文字的界面。

很多程序会创建隐藏的主要窗口来处理各种事情。对于你的需求,你可以忽略这些隐藏窗口,只关注可见的窗口就可以了。

5

有时候,程序会创建一些看不见的窗口来完成自己的任务。你可以忽略这些窗口(可以使用 IsWindowVisible 函数来判断)。

撰写回答