如何使用 pywin32 获取 Python 中特定应用程序 window 的句柄?
How to get handle for a specific application window in Python using pywin32?
我正在尝试修改一些 Python 代码,这些代码在 Windows 10 中截取特定应用程序 window 的屏幕截图。我正在尝试使用 win32ui
/ win32gui
来自 pywin32 包的模块用于此目的。这是损坏的代码:
def getWindow():
name = "Windows PowerShell"
window = win32ui.FindWindow(None, name)
windowDC = win32gui.GetWindowDC(window)
最后一行导致错误。这是控制台输出的相关部分:
File ".\fake_file_name.py", line 9, in getWindow
windowDC = win32gui.GetWindowDC(window)
TypeError: The object is not a PyHANDLE object
我不是很熟悉 Python 的类型系统或错误消息,但这个错误使它看起来 GetWindowDC
期待一个类型为 PyHANDLE
的参数。 The documentation 我发现 win32gui.FindWindow
看起来 PyHANDLE
确实是输出类型。
另一方面,这些非常相似的代码行来自确实工作的函数:
hwin = win32gui.GetDesktopWindow()
hwindc = win32gui.GetWindowDC(hwin)
这是 win32gui.GetDesktopWindow
的 doc page。如果之前显示的错误消息没有特别提到 PyHANDLE
,我会假设 FindWindow
和 GetDesktopWindow
return 不同且不兼容的类型。
谁能帮我理解这条错误消息的含义以及它出现的原因?我也对获取名称为 "Windows Powershell" 的 window 的设备上下文的示例代码感兴趣,因为我的损坏代码试图这样做。
其他信息:
Documentation page 对于 win32gui.GetWindowDC
您可以使用EnumWindows()
,这将搜索所有window,阅读MSDN doc:
import win32gui
def getShell():
thelist = []
def findit(hwnd,ctx):
if win32gui.GetWindowText(hwnd) == "Windows PowerShell": # check the title
thelist.append(hwnd)
win32gui.EnumWindows(findit,None)
return thelist
b = getShell()
print(b) # b is the list of hwnd,contains those windows title is "Windows PowerShell"
我正在尝试修改一些 Python 代码,这些代码在 Windows 10 中截取特定应用程序 window 的屏幕截图。我正在尝试使用 win32ui
/ win32gui
来自 pywin32 包的模块用于此目的。这是损坏的代码:
def getWindow():
name = "Windows PowerShell"
window = win32ui.FindWindow(None, name)
windowDC = win32gui.GetWindowDC(window)
最后一行导致错误。这是控制台输出的相关部分:
File ".\fake_file_name.py", line 9, in getWindow
windowDC = win32gui.GetWindowDC(window)
TypeError: The object is not a PyHANDLE object
我不是很熟悉 Python 的类型系统或错误消息,但这个错误使它看起来 GetWindowDC
期待一个类型为 PyHANDLE
的参数。 The documentation 我发现 win32gui.FindWindow
看起来 PyHANDLE
确实是输出类型。
另一方面,这些非常相似的代码行来自确实工作的函数:
hwin = win32gui.GetDesktopWindow()
hwindc = win32gui.GetWindowDC(hwin)
这是 win32gui.GetDesktopWindow
的 doc page。如果之前显示的错误消息没有特别提到 PyHANDLE
,我会假设 FindWindow
和 GetDesktopWindow
return 不同且不兼容的类型。
谁能帮我理解这条错误消息的含义以及它出现的原因?我也对获取名称为 "Windows Powershell" 的 window 的设备上下文的示例代码感兴趣,因为我的损坏代码试图这样做。
其他信息:
Documentation page 对于 win32gui.GetWindowDC
您可以使用EnumWindows()
,这将搜索所有window,阅读MSDN doc:
import win32gui
def getShell():
thelist = []
def findit(hwnd,ctx):
if win32gui.GetWindowText(hwnd) == "Windows PowerShell": # check the title
thelist.append(hwnd)
win32gui.EnumWindows(findit,None)
return thelist
b = getShell()
print(b) # b is the list of hwnd,contains those windows title is "Windows PowerShell"