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 ...
随机推荐
- 数据类型总结——Boolean类型(布尔类型)
相关文章 简书原文:https://www.jianshu.com/p/e5c75d4be636 数据类型总结——概述:https://www.cnblogs.com/shcrk/p/9266015. ...
- iOS开发webView的使用一
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...
- Home界面的启动
继上篇文章Launcher进程的启动,我们继续分析Home界面的启动. public final class ActivityThread { ...... public static final v ...
- dot-- 资源汇总
http://graphviz.org/doc/info/attrs.htmlhttp://graphs.grevian.org/http://graphs.grevian.org/exampleht ...
- Git使用经验小结
2012春,开始正式使用SVN,2014年9月加入一起好后,开始使用Git. 有了一些使用经验,也看了下网上关于"Git全胜SVN"的言论. 结合自己的实际情况,简要写几句: 1 ...
- Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 10 in
Warning: preg_replace(): Compilation failed: missing terminating ] for character class at offset 10 ...
- 真机测试时出现 could not find developer disk image问题
解决Xcode在ipad/iphone 系统真机测试时出现could not find developer disk image问题 原因:手机系统版本比xcode版本高,sdk不支持 方法:更新Xc ...
- Filter,Listener(转)
一.Filter的功能filter功能,它使用户可以改变一个 request和修改一个response. Filter 不是一个servlet,它不能产生一个response,它能够在一个reques ...
- Java之泛型<T> T与T的用法
<T> T表示返回值是一个泛型,传递啥,就返回啥类型的数据,而单独的T就是表示限制你传递的参数类型,这个案例中,通过一个泛型的返回方式,获取每一个集合中的第一个数据, 通过返回值<T ...
- TensorFlow 学习(九)—— 初始化函数(概率分布函数 api、常数生成函数)
在 TensorFlow 中,一个变量的值在被使用之前,其初始化过程需要被明确地调用. 1. 随机数生成函数 tensorflow 下的概率分布函数,一般用于对变量进行初始化,这里的变量显然是指神经网 ...