获取在 Windows 10 中名为 windows 的可见列表

Getting list of visible, named windows in Windows 10

我正在尝试获取打开的列表 windows。我被困在这一点上。我已经评论了到目前为止不起作用的所有内容。

import win32gui

def winEnumHandler(hwnd, ctx):

    if win32gui.IsWindowVisible(hwnd):
        if win32gui.GetWindowText(hwnd) != "":
            wnd_name = win32gui.GetWindowText(hwnd)
            print(f'Type: {type(wnd_name)} Name: {wnd_name}')

            # return wnd_name
        # return wnd_name
    # return wnd_name

win32gui.EnumWindows(winEnumHandler, None)

这是输出示例。

Type: <class 'str'> Name: vksts
Type: <class 'str'> Name: *new 10 - Notepad++
Type: <class 'str'> Name: _Chrome Downloads
Type: <class 'str'> Name: Microsoft Text Input Application
Type: <class 'str'> Name: Settings
Type: <class 'str'> Name: Program Manager

虽然 wnd_name 是一个字符串并且我可以打印它,但我不知道如何将它的值获取到脚本的主要部分。

当我取消注释第一个 return wnd_name 时,我收到第 win32gui.EnumWindows(winEnumHandler, None).

行的错误消息 TypeError: an integer is required (got type str)

当我取消注释第二个或第三个 return wnd_name 时,我收到第 return wnd_name.

行的错误 UnboundLocalError: local variable 'wnd_name' referenced before assignment

win32gui.EnumWindows(winEnumHandler, None) 循环遍历 windows 时,我如何捕获每个 window 标题并将其提供给列表,以便我最终得到类似 [=22= 的内容]?

处理函数是由您提供给它的代码调用的。 您尝试 return 来自您提供的处理程序函数的字符串。

您收到 TypeError: an integer is required (got type str) 错误 - 这意味着在 win32gui.EnumWindows(winEnumHandler, None) 中,函数的 return 值(字符串)用于需要整数的内容 - 很可能windowid/hwndid.

其他错误是因为如果没有给出 window 标题就离开了变量的范围,所以变量永远不会实例化并且不能 returned 因为它不知道.. .

def winEnumHandler(hwnd, ctx): 
    if win32gui.IsWindowVisible(hwnd):
        if win32gui.GetWindowText(hwnd) != "":
            # you define the variable here
            wnd_name = win32gui.GetWindowText(hwnd)
            print(f'Type: {type(wnd_name)} Name: {wnd_name}') 
            return wnd_name
        # if win32gui.GetWindowText(hwnd)  == "" the wnd_name is never
        # created in the first place, so you get the UnboundLocalError 
        return wnd_name
    return wnd_name

如果

你可以试试
import win32gui

names = []

def winEnumHandler(hwnd, ctx):
    if win32gui.IsWindowVisible(hwnd):
        n = win32gui.GetWindowText(hwnd)  
        if n:
            names.append(n)
            print(n)

win32gui.EnumWindows(winEnumHandler, None)

print(names)

适合你。