前些日子,由于需要,用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 使用小技巧的更多相关文章

  1. 我做的python常用的小技巧

    在python编码过程中,总会遇到各种各样的小问题,我想着记录下来,以备查用,总结过去,是为了更好的思考与进步. 一. 去除变量中(标题中)多余的字符 数据处理过程中,遇到这样的情况: y=['月份' ...

  2. python编程常见小技巧

    #主要是记录常见的小问题以及解决办法 ##1.复制的代码,经常出现TAB和空格不一致的情况 将tab或者空格删除,然后重新打出空格或者tab就可以了: ##2.python读取文件,经常出现的编码en ...

  3. Python爬虫常用小技巧之设置代理IP

    设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...

  4. Python性能提升小技巧

    第一部分 1-使用内建函数: 你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速 2-使用 join() 连接字符串. 你可以使用 + 来连接字符串. 但由于string ...

  5. python运维小技巧

    以下实验均在Linux上进行 1.一秒钟启动一个下载服务器 python版本 python2:  #python -m SimpleHTTPServer Serving HTTP on 0.0.0.0 ...

  6. python Selenium+phantomjs 小技巧

    1.元素模糊定位 如抓取下面列表: elements = doc("li[id^='result_']") 2.元素精确定位 elements =doc("div[cla ...

  7. python json模块小技巧

    python的json模块通常用于与序列化数据,如 def get_user_info(user_id): res = {"user_id": 190013234,"ni ...

  8. python 小兵之小技巧

    用for循环打印数字从1开始 for a in range(1,num+1): 用split切割字符串可以用索引选择部分 int(el.split("_")[1]) range 第 ...

  9. python 的一些小技巧

    赋值: a, b, c = 'xixi', 'haha', 'hehe' 连接字典: >>> s = {1:'a', 2:'b', 3:'c'} >>> s.key ...

随机推荐

  1. NET WinForm 开发所见即所得的 IDE 开发环境

    Github 开源:使用 .NET WinForm 开发所见即所得的 IDE 开发环境(Sheng.Winform.IDE)[2.源代码简要说明]   GitHub:https://github.co ...

  2. [React] Update Component State in React With Ramda Lenses

    In this lesson, we'll refactor a React component to use Ramda lenses to update our component state. ...

  3. [SCSS] Use Standard Built-in SCSS Functions for Common Operations

    We can use javascript for color and opacity variations, math, list and map logic or to see if someth ...

  4. php实现 字符个数统计

    php实现 字符个数统计 一.总结 一句话总结: 1.php字符转ascii码函数? ord() 6 if(ord($input[$i]) < 128 and 0 < ord($input ...

  5. [Vue] Parent and Child component communcation

    By building components, you can extend basic HTML elements and reuse encapsulated code. Most options ...

  6. Git 常用命令总结(精问)

    Git 常用命令总结(精问) 一.总结 一句话总结:下次尝试做任何git的操作之前,把这个精看精问一遍,绝对会有意向不到的收获. 二.Git 常用命令总结 1.git常用命令 安装及配置: Ubunt ...

  7. iOS解决json串中的NSNull类型

    iOS解决json串中的NSNull类型   后端返回的数据中总会出现一些NSNull类型,当我们一处理程序就会崩溃,因此想到把返回的数据中的NSNull类型全部转换成@""空字符 ...

  8. iOS开发- Xcode插件- 规范凝视生成器VVDocumenter 自己的见解

    xcode升级  VVDocumenter 插件失效怎么办?? 首先给个完整的安装參考:http://www.th7.cn/Program/IOS/201405/212030.shtml  參考这个能 ...

  9. Java泛型解析(02):通配符限定

    Java泛型解析(02):通配符限定      考虑一个这种场景.计算数组中的最大元素. [code01] public class ArrayUtil { public static <T&g ...

  10. sql server中查询结果集顺序问题

    因为优化器可能会选择并行处理,或者在多文件情况下不按“期待”顺序扫描数据,所以无法保证数据的顺序.唯一能确保顺序的只有order by. 并行处理的过程导致顺序不一致,单核上不存在并行,而双核,可能使 ...