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

时间:2011-08-16 09:22:55

标签: python windows handle

在python中,我通过EnumWindows枚举顶级窗口,并且我还通过EnumProcesses枚举了这些过程。

然后在python脚本中,我将属于同一个pid的所有窗口句柄放入一个列表中(我通过GetWindowThreadProcessId执行了此操作)。

后来我发现了一些东西:有3个窗口句柄属于notepad.exe,但我只打开一个文本文件。

为什么?

此外,我试图通过SetForegroundWindow将文本窗口设置为前景窗口,我将三个窗口句柄传递给此函数,两个工作。

怎么会这样?

2 个答案:

答案 0 :(得分:5)

进程有时会为自己的目的创建不可见的窗口。你应该忽略它们(使用IsWindowVisible函数)。

答案 1 :(得分:4)

要研究这类事情,你最好的朋友是 Spy ++ ,如果你能得到它,它会附带几个版本的Visual Studio。

根据它,notepad.exe创建了三个顶级窗口:

  1. 可见主窗口,类名“记事本”,重叠。
  2. 隐藏,禁用,弹出窗口,类名“MSCTFIME UI”,标题“M”。
  3. 另一个隐藏的,禁用的弹出窗口,类名“IME”,标题“默认IME”。
  4. 记事本在内部使用两个隐藏的窗口来实现IME(输入法编辑器),即用于键入复杂脚本的GUI。

    许多程序为很多东西创建顶级隐藏窗口。根据您的意图,您可以忽略它们并仅使用可见的那些。