python win32api 使用小技巧
前些日子,由于需要,用python写了个小插件,通过win32api 访问外部程序的窗口 并且做些小操作。
因为原来对win32api 不怎么熟悉 所以只好求救。群里有个QQ:32034767 唐骁勇 tsy_007@163.com
这小伙子不错 心热人善
动手之前要选对好工具。(既然是基于WIN32api 当然要用微软的专用的spyxx.exe,上手相当简单。比较专业 ,能查出当前桌面上所有的窗口句柄和类型。VC的那个绿色版的 spy++效果不强(Au3Info.exe也一样),无法追踪多级子窗口。 下面是简易代码:(实际上就是用钩子原理 网络上也可以找到)
import win32ui,win32con,pyHook,pythoncom,win32gui ,wx
def hookhandle(event):
if event.KeyID==9:#tab键值
try:
pwin=win32ui.FindWindow('AfxMDIFrame70',None)#主窗口 AfxMDIFrame70就是你用#spyxx.exe查找到的窗口类名
pwin1=win32ui.FindWindowEx(pwin,None,'MDIClient',None)
pwin2=win32ui.FindWindowEx(pwin1,None,'AfxFrameOrView70',None)
pwin3=win32ui.FindWindowEx(pwin2,None,"AfxOleControl70",None)
pwin4=win32ui.FindWindowEx(pwin3,None,None,"PatientCardControl Frame")#可以根据窗口#的标题名称查找 标题名称一般外接程序是不变的 而类名有时是变化的 比如机器重启 关闭等
pwin5=win32ui.FindWindowEx(pwin4,None,"AfxMDIFrame70",None)
pwin6=win32ui.FindWindowEx(pwin5,None,"AfxWnd70",None)
pwin7=win32ui.FindWindowEx(pwin6,None,"#32770",None)
textbox=pwin7.GetDlgItem(222)#获取控件的ID
textbox2=pwin7.GetDlgItem(224)
buf='0x0'*1024
buf2='0x0'*1024
textbox.SendMessage(win32con.WM_SETTEXT,"")#先清空控件内容
textbox2.SendMessage(win32con.WM_SETTEXT,"")
oldlen=textbox.SendMessage(win32con.WM_GETTEXT,buf)
oldlen2=textbox2.SendMessage(win32con.WM_GETTEXT,buf2)
textbox.SendMessage(win32con.WM_SETTEXT,buf[0:oldlen]+str(blh))#发送消息 注意不能##用%s 替换 所以一般需要全局变量 来替换
textbox2.SendMessage(win32con.WM_SETTEXT,buf2[0:oldlen]+str(name))
except:
wx.LogMessage('没有发现可用的窗口!请确保程序已经运行')
hm = pyHook.HookManager()#初始实例
hm.KeyDown=hookhandle
hm.HookKeyboard()
pythoncom.PumpMessages(5000)#据说是winctype的新功能 延迟吧 具体什么也不清楚
hm.UnhookKeyboard()#释放键盘捕捉 好像效果不明显
#for i in range (0,40):
#win32api.Sleep(20)
#if win32ui.PumpWaitingMessages(0,-1):
win32api.PostQuitMessage(0)# 退出监控消息 很关键 必须配合sys.setrecursionlimit(4000)使用效果##才明显 不然的话 程序无法退出。
#raise exceptions.SystemExit
def OnClose(self, event):
sys.setrecursionlimit(4000)#相当关键
self.Close(True)
self.Destroy()
python win32api 使用小技巧的更多相关文章
- 我做的python常用的小技巧
在python编码过程中,总会遇到各种各样的小问题,我想着记录下来,以备查用,总结过去,是为了更好的思考与进步. 一. 去除变量中(标题中)多余的字符 数据处理过程中,遇到这样的情况: y=['月份' ...
- python编程常见小技巧
#主要是记录常见的小问题以及解决办法 ##1.复制的代码,经常出现TAB和空格不一致的情况 将tab或者空格删除,然后重新打出空格或者tab就可以了: ##2.python读取文件,经常出现的编码en ...
- Python爬虫常用小技巧之设置代理IP
设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...
- Python性能提升小技巧
第一部分 1-使用内建函数: 你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速 2-使用 join() 连接字符串. 你可以使用 + 来连接字符串. 但由于string ...
- python运维小技巧
以下实验均在Linux上进行 1.一秒钟启动一个下载服务器 python版本 python2: #python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 ...
- python Selenium+phantomjs 小技巧
1.元素模糊定位 如抓取下面列表: elements = doc("li[id^='result_']") 2.元素精确定位 elements =doc("div[cla ...
- python json模块小技巧
python的json模块通常用于与序列化数据,如 def get_user_info(user_id): res = {"user_id": 190013234,"ni ...
- python 小兵之小技巧
用for循环打印数字从1开始 for a in range(1,num+1): 用split切割字符串可以用索引选择部分 int(el.split("_")[1]) range 第 ...
- python 的一些小技巧
赋值: a, b, c = 'xixi', 'haha', 'hehe' 连接字典: >>> s = {1:'a', 2:'b', 3:'c'} >>> s.key ...
随机推荐
- JSP中多条件判断
<c:if test="${result_map.connNew ne null and result_map.connNew ne 0}"> </c:if> ...
- [Angular2 Animation] Control Undefined Angular 2 States with void State
Each trigger starts with an “undefined” state or a “void” state which doesn’t match any of your curr ...
- [Angular2 Form] Reactive form: valueChanges, update data model only when form is valid
For each formBuild, formControl, formGroup they all have 'valueChanges' prop, which is an Observable ...
- 一个神奇的控件——Android CoordinatorLayout与Behavior使用指南
CoordinatorLayout是support.design包中的控件,它可以说是Design库中最重要的控件. 本文通过模仿知乎介绍了自定义Behavior,通过模仿百度地图介绍了BottomS ...
- jquery-11 jquery中的事件切换如何实现
jquery-11 jquery中的事件切换如何实现 一.总结 一句话总结:事件切换hover()和toggle()函数.参数两个,都是函数,依次执行两个函数. 1.如何实现单击切换图片? 用togg ...
- jquery的图片异步加载
<script src="jquery.js"></script> <script src="jquery.lazyload.js" ...
- php实现求二进制中1的个数(右移、&、int32位)(n = n & (n - 1);)
php实现求二进制中1的个数(右移.&.int32位)(n = n & (n - 1);) 一.总结 1.PHP中的位运算符和java和c++一样 2.位移运算符看箭头方向,箭头向左就 ...
- php资源集
php资源集 一.php资源网站 1.php中文网(js特效,模板,软件工具下载,课程) www.php.cn js特效下载_js特效代码_js特效大全-php中文网免费下载站http://www.p ...
- 设置好ftp后用xftp连接提示无法打开,无法显示远程文件夹
原文:设置好ftp后用xftp连接提示无法打开,无法显示远程文件夹 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/the_victory/artic ...
- 【CF706C】Hard problem
Description Vasiliy is fond of solving different tasks. Today he found one he wasn't able to solve h ...