转 Python使用win32api系统钩子
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转 Python使用win32api系统钩子相关的知识,希望对你有一定的参考价值。
有这样一个需求:客户的测试程序扫描一个产品的条形码,但是它没有和系统验证的功能(就是从系统里面检查是否可以在此测试位进行测试。比如说有10个测试位,这是第4个,那么就必须前面的3个测试位全部pass后,第4个测试位才能测试,这就是所说的验证。当然还有其他的情况,比如每个产品同一测试位只能测2次,再测第3次系统就应该提示要去维修了)。
我们碰到的问题是客户给的程序没有验证这一块,让客户改程序也不是很好办。唉,谁让现在的客户那么牛。
于是我们看看能不能自己搞定。思路是:我们添加一个程序先接收产品的条码,和系统验证之后如果能继续测试,就把条码再写到客户程序的条码文本框里,如果流程错误,提示错误,让操作员修正。
难点是我们怎么找到客户程序的条码文本框。于是从网上搜索(我们用的是Python,需要先安装pywin32模块)win32api的用法,还好找到了一点,下面给个例子说明一下(在python shell里):
一, 首先import win32gui, win32con
二, 使用win32gui.FindWindow找到目标程序:
win = win32gui.FindWindow(None, ‘User Login‘)
三, 使用win32gui.FindWindowEx找到目标文本框:
tid = win32gui.FindWindowEx(win, None, ‘Edit‘, None)
四, 使用win32gui.SendMessage发送文本到目标文本框:
win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, ‘hello‘)
当然了,可以继续找到下一个文本框:
username = win32gui.FindWindowEx(win, tid, ‘Edit‘, None)
只是还没找到给字符串加回车的功能,在记事本里可以实现,不知道为什么在这里不行。如果各位大侠有知道的希望不吝赐教。
目前先研究到这里。以防忘记所以记在这里,以备以后使用。
更新:已经找到发送回车的方法:
win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, ‘hello‘)
win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32gui.PostMessage(tid, win32con.WM_KEYUP, win32con.VK_RETURN, 0)
以上是关于转 Python使用win32api系统钩子的主要内容,如果未能解决你的问题,请参考以下文章