首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用pywin32获取Python中特定应用程序窗口的句柄?

如何使用pywin32获取Python中特定应用程序窗口的句柄?
EN

Stack Overflow用户
提问于 2020-04-11 03:35:55
回答 1查看 3.8K关注 0票数 2

我试图修改一些Python代码,这些代码可以截取Windows 10中特定应用程序窗口的截图。为此,我尝试使用来自win32ui包的pywin32 / win32gui模块。以下是破译的代码:

代码语言:javascript
运行
复制
def getWindow():
    name = "Windows PowerShell"
    window = win32ui.FindWindow(None, name)
    windowDC = win32gui.GetWindowDC(window)

最后一行将导致错误。以下是控制台输出的相关部分:

代码语言:javascript
运行
复制
  File ".\fake_file_name.py", line 9, in getWindow
    windowDC = win32gui.GetWindowDC(window)
TypeError: The object is not a PyHANDLE object

我不太熟悉Python的类型系统或错误消息,但是这个错误使得GetWindowDC看起来像是在期待PyHANDLE类型的争论。我可以为文献资料找到的win32gui.FindWindow使它看起来像一个PyHANDLE确实是输出类型。

另一方面,这些非常相似的代码行来自于一个可以工作的函数:

代码语言:javascript
运行
复制
    hwin = win32gui.GetDesktopWindow()
    hwindc = win32gui.GetWindowDC(hwin)

这是doc页面 for win32gui.GetDesktopWindow。如果前面显示的错误消息没有具体提到PyHANDLE,我只会假设FindWindowGetDesktopWindow返回不同和不兼容的类型。

有人能帮助我理解这个错误信息的含义以及它出现的原因吗?我还会对示例代码感兴趣,这些代码获取名为“”的窗口的设备上下文,就像我的坏代码试图做的那样。

其他信息:文件页 for win32gui.GetWindowDC

EN

Stack Overflow用户

回答已采纳

发布于 2020-04-11 03:45:26

您可以使用EnumWindows(),这将搜索所有的窗口,在MSDN文档中读取它

代码语言:javascript
运行
复制
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"
票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61151811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档