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 ...
随机推荐
- ZOJ 1136 Longest Ordered Subsequence DP
传送门:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1136 题目大意:给定一串序列,求最长的升序列长度,如1, 7, 3, ...
- python类继承时构造函数的运行问题
假设子类定义了自己的__init__构造方法函数.当子类的实例对象被创建时,子类仅仅会运行自己的__init__方法函数.假设子类没有定义自己的构造方法函数.会沿着搜索树找到父类的构造方法函数去运行父 ...
- [Angular2 Animation] Delay and Ease Angular 2 Animations
By default, transitions will appear linearly over time, but proper animations have a bit more custom ...
- WIFI 状态栏显示的wifi信号强度与wifisetting列表不一致
[DESCRIPTION] 状态栏显示的wifi信号强度与wifisetting列表不一致(不同步) [ANALYSIS] 1.apk都是接收RSSI_CHANGED intent,并调用WifiMa ...
- android 应用内部获取本应用或者相应包名的应用的SHA1签名的办法
我这个人比較懒.每次做的都是心血来潮,所以打算改掉这个坏毛病.昨晚非常晚才睡,躺在床上一直在回忆.这两年来,我以前的目标是什么,我放弃了什么,我完毕了什么. 结果目标非常多,也放弃了一些. 完毕的差点 ...
- CTR深度学习
深度学习在 CTR 中应用 一. Wide&&Deep 模型 首先给出Wide && Deep [1] 网络结构: 本质上是线性模型(左边部分, Wide model) ...
- mac 系统 突破百度网盘网速限制
感谢https://blog.csdn.net/Deft_MKJing/article/details/82561564
- 使用Array和[]创建数组的区别
原文 简书原文:https://www.jianshu.com/p/57a337d20aea 大纲 前言 对使用Array和[]创建数组的区别的解释 个人理解 前言 JS定义数组变量时,在不需要给定数 ...
- JDBC之一:JDBC快速入门 分类: B1_JAVA 2014-02-19 14:49 745人阅读 评论(0) 收藏
(1)下载Oracle的JDBC驱动,一般放在$ORACLE_HOME/jdbc/lib目录,关于驱动的版本请见: http://elf8848.iteye.com/blog/811037 ...
- 在word中使用notepad++实现代码的语法高亮 分类: C_OHTERS 2013-09-22 10:38 2273人阅读 评论(0) 收藏
转载自:http://blog.csdn.net/woohello/article/details/7621651 有时写文档时需要将代码粘贴到word中,但直接粘贴到word中的代码虽能保持换行与缩 ...