发布于2020-01-17 19:41 阅读(2004) 评论(0) 点赞(30) 收藏(0)
OK,所以在下面的代码中
import win32api
import win32gui
hwnd = win32api.ShellExecute(None, "open", "notepad.exe", "test.txt", None, 6)
rect = win32gui.GetWindowRect(hwnd)
我成功打开记事本,并收到一个大于32的返回值,以指示执行成功。在docs中:http : //timgolden.me.uk/pywin32-docs/win32api__ShellExecute_meth.html 将返回值指定为实例句柄,因此我希望能够将该句柄用作GetWindowRect调用的参数。文件:http://timgolden.me.uk/pywin32-docs/win32gui__GetWindowRect_meth.html
在调试器中,我可以看到hwnd等于{long} 42,我的GetWindowRect调用返回错误1400,无效的窗口句柄。
那么,为什么手柄错误?如何获得可用的手柄?
根据Microsoft的文档,返回值的类型为HINSTANCE,但它不是真实的实例,只能用于与各种错误代码进行比较。从历史上看,在16位窗口中,实例句柄用于标识特定的可执行文件或DLL实例,但即使那样,它也与窗口句柄不同。
返回值
类型:HINSTANCE
如果函数成功,则返回大于32的值。如果函数失败,则返回指示失败原因的错误值。返回值强制转换为HINSTANCE,以便与16位Windows应用程序向后兼容。但是,这不是真正的阻碍。只能将其强制转换为int并与下面的32或以下错误代码进行比较。
据我所知,获得可用的窗口句柄的最佳方法是遍历系统中的顶级窗口,直到找到具有预期类和标题的窗口。
这是基于我几年前写过的东西的代码摘录,它查找具有匹配标题和类的Windows:
from win32gui import EnumWindows, GetClassName
from win32ui import CreateWindowFromHandle
def toplevelWindows(s, klass):
res = []
def callback(hwnd, arg):
name = GetClassName(hwnd)
w = CreateWindowFromHandle(hwnd)
title = w.GetWindowText()
if s in title or name==klass:
res.append(w)
EnumWindows(callback, 0)
return res
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/228615/a239e540b1954de6d7c5/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!