:获取目前窗口的层次,对于获取此窗口中指定的子窗口的句柄有非常重要的意义。此部分功能Pyspy++是无法提供的,因为它只提供一个子窗口,所以无法获得目前窗口的层次 例如我想获得OG2263登录界面的窗口层次方法如下: 使用1)中的方法将查找图标拖
用win32模块(第三方模块需要下载安装)
方法win32guiFindWindow()#获取每个应用程序的窗口
win32guiFindWindowEx()#获取上面窗口下的控件 获取控件可以用spy++这款软件
win32guiSendMessage()#输入‘字符’
win32guiPostMessage()#按下发送按钮,具体参数网上找找 有问题可以问下
不知道你解决了没,最近正好研究python。
hwnd=win32guiFindWindow()这个获取窗体句柄,大概都会用;
ctrl=win32guiFindWindowEx(hwnd,None,'窗口类名',‘标题文本’)已知控件类名或控件名时获取控件句柄,这个标题文本不一定存在,所以使用None默认值获取的是该窗口类名中第一个顺位的控件句柄。
你使用b=win32guiGetDlgItem(edit,资源ID)最终结果是获取的是句柄,这里的资源ID其实是spy++中的窗口ID,句柄是可变的,窗口ID是不可变的。这里似乎错了,你这样子大概获取的是控件中的子项(控件有子项的话,比如Combox中的edit框),我猜的,没试过。b=win32guiGetDlgItem(hwnd,窗口ID)是已知ID下获取某控件句柄
如果你想获取某个控件的ID则ctrlid=win32guiGetDlgCtrlID(ctrl)这是一只某控件句柄的情况下获取该控件在应用程序中的窗口ID。
如果不知控件句柄的情况下大概可以试试spy++获取窗口ID,把窗口ID(这个是16进制的)转化成10进制带进b=win32guiGetDlgItem(hwnd,窗口ID)大概也可以得到控件句柄。
其实就是三个函数之间的转化
ctrl=win32guiFindWindowEx(hwnd,None,'edit',None)控件句柄
ctrlid=win32guiGetDlgCtrlID(ctrl)控件的窗口id
ctrl2=win32guiGetDlgItem(hwnd,ctrlid)控件句柄
print "%x" %ctrllist
print "%x" %ctrlid
print "%x" %ctrl
输出,看一下数据与spy++是否一致。然后ctrl=ctrl2
我们先创建一个tk窗口#-- coding:utf-8 --import tkinter#小编这里是python3,使用python2的小伙伴把tkinter换成Tkinter即可,否则报错哦win = tkinterTk()winmainloop()这样我们就创建了一个tk窗口,尽管这个窗口什么都没有。
我们要用到的方法是tk对象提供的winfo_width和winfo_height,从字面上我们都可以理解:winfo_width获得窗口的宽度,winfo_height获得窗口的高度。以上两个方法都是无参方法,通过返回值我们可以获得窗口的宽高。OK,我们插入代码print("当前窗口的宽度为",winwinfo_width())print("当前窗口的高度为",winwinfo_height())
未经芝士统回答便允许不得转载本何文内容,否则将视有为侵可权
这里很多小伙伴就会问了,为什么是1?窗口的宽高绝对不是1。没错,但是程序并没有做错,我们只是少了点什么?我们需要刷新窗口数据,如果小伙伴经常使用tk这个图形库,就会知道,我们使用winfo_width和winfo_height得到的宽高其实是tk初始化时的一个值。此时我们调用update方法,刷新win窗口。winupdate()快看,是不是成功获得了窗口的宽高?
我们可以自定义窗口大小来看数据是否正确。例如小编这里设置窗口大小 = 100 x 100,即宽100px高100pxwingeometry("100x100")这里可能又有小伙伴会问了,为什么宽度又出错了?其实很简单,因为tk帮我们创建了窗口装饰器,装饰器有以下几个部分:图标、标题、最大化、最小化和关闭按钮这些装饰器占据了16个px,其实是15个,还有1个px像素点是作为窗口和装饰器之间的距离红色标记部分所有代码为:#-- coding:utf-8 --import tkinterwin = tkinterTk()wingeometry("100x100")winupdate()print("当前窗口的宽度为",winwinfo_width())print("当前窗口的高度为",winwinfo_height())winmainloop()
给你一个思路。用 python 的 win32gui 可以枚举所有窗口句柄,想办法获取窗口句柄,然后通过 GetWindowText() 方法来获取窗口的标题,也就是结果所在的窗口句柄。
我用WIN32试了一下,我是hook了鼠标所在的句柄,但当鼠标指向结果时,结果的窗口句柄获取不到,只能获取到结果窗口的上一个窗口的句柄(也就是你图中的00280756的句柄),但可以通过枚举子窗口来获取(也就是枚举你中的002F0854句柄),然后经过一系列匹配和判断最终得到结果的值。
# encoding: gb2312import win32gui
def _MyCallback( hwnd, extra ):
hwnds = extra
hwndsappend(hwnd)
def _CallBack(hwnd, extra):
value, m_index = extra
if win32guiGetClassName(hwnd) == 'Static':
m_indexappend(None)
if len(m_index) == 4:
valueappend(win32guiGetWindowText(hwnd))
def TestEnumWindows():
windows = []
results = []
win32guiEnumWindows(_MyCallback, (windows))
i = 0
for hwnd in windows:
if win32guiGetClassName(hwnd) == 'CalcFrame':
m_index = []
win32guiEnumChildWindows(hwnd, _CallBack, (results, m_index))
i += 1
for result in results:
print '计算器的结果为:' , result
TestEnumWindows()
这样更好一些,可能有些特征不同。我是枚举所有窗口,然后获取窗口的classname为CalcFrame的窗口,然后再枚举CalcFrame的子窗口,然后判断第4个出现的Static控件就是结果的控件。
可以使用正则表达式或者xpath方式,下面这个免费教程是说明怎么用正则表达式来取得你要的东西的,供参考。
>
以上就是关于python win32怎么获取窗体里面的内容全部的内容,包括:python win32怎么获取窗体里面的内容、python获取打开的应用窗口输入字符、python pywin32 里面 *** 作窗体,获取窗体里面的数据,在函数GetDlgItem函数中,怎么获取第二个参数的值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)