【问题标题】:How do I take out the focus or minimize a window with Python?如何使用 Python 消除焦点或最小化窗口?
【发布时间】:2011-02-17 00:03:22
【问题描述】:

我需要将焦点放在指定的窗口上,而我看到的唯一方法是最小化它前面的所有窗口,直到找到正确的窗口...

我该怎么做?

Windows 7,并没有特定的工具包....

每种类型的窗口,例如,firefox 和控制台命令

【问题讨论】:

  • 什么平台?什么样的窗户?
  • 您需要提供比您拥有的信息更多的信息才能回答这个问题。哪个窗口系统?视窗,X视窗?像 wxPython 或 Tk 这样的特定工具包?

标签: python firefox windows-7 window


【解决方案1】:

您需要枚举窗口并匹配窗口的标题以获得您想要的窗口。下面的代码搜索标题中带有“firefox”的窗口并设置焦点:

import win32gui

toplist = []
winlist = []
def enum_callback(hwnd, results):
    winlist.append((hwnd, win32gui.GetWindowText(hwnd)))

win32gui.EnumWindows(enum_callback, toplist)
firefox = [(hwnd, title) for hwnd, title in winlist if 'firefox' in title.lower()]
# just grab the first window that matches
firefox = firefox[0]
# use the window handle to set focus
win32gui.SetForegroundWindow(firefox[0])

要最小化窗口,请输入以下行:

import win32con
win32gui.ShowWindow(firefox[0], win32con.SW_MINIMIZE)

【讨论】:

    【解决方案2】:

    您需要枚举窗口并匹配窗口的标题以获得所需的窗口。下面的代码搜索标题中带有“firefox”的窗口并设置焦点

    要最小化窗口,请使用以下行:

    def enumHandler(hwnd, lParam):
       if 'firefox' in win32gui.GetWindowText(hwnd):
          win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
    
    win32gui.EnumWindows(enumHandler, None)
    

    这适用于 Windows 10、Python3.5 32bit、pywin32-223。


    我报了上面的情况,但是出现了错误。

    Traceback(最近一次通话最后一次):

    TypeError: 该对象不是 PyHANDLE 对象

    【讨论】:

      【解决方案3】:

      我从这个问题中假设,您想要编写一个可以与任何应用程序的任何窗口一起使用的泛型。

      您可能想试试Python Win32 GUI Automation 库。我没有使用它,但听起来它可能是您正在寻找的东西。如果这不起作用,您最好的选择可能是放弃 python 并使用像 AutoIt 这样的工具,它提供对窗口操作的内置支持。

      如果这些解决方案都不起作用,您可能不得不直接调用 windows api。我不知道win32api包是否封装了必要的功能,否则你将不得不用c/c++编写一个python模块。

      如果这种功能在 .net api 中可用,您可以使用 IronPython。

      【讨论】:

      • 我已经在使用 win32gui 模块,但是我无法做点什么……我没有找到任何命令,例如,minimize,或者其他可以去掉焦点的命令,只有 getfocus和 setfocus =/
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      相关资源
      最近更新 更多