获取在 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)
适合你。
我正在尝试获取打开的列表 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)
适合你。