python-pywin32

python可以直接操控win32程序,也就是原生的C,C++程序,比如mfc写的程序。但是不能操作qt这种自绘的组件。

        环境搭建

        python建议下载3.4,因为pywin32貌似没找到python3.5的版本

        1、安装python,配置环境变量到python的安装路径和Lib\site-packages

        2、安装相应版本的pywin32,输入如下命令:


              如果没有报错,说明安装成功。

              如果报错找不到模块,把Lib\site-packages\pywin32_system32目录下的dll文件拷贝到系统system32中

          在eclipse中开发

          下载安装插件pyDev

           设置解释器

          设置编码


         

         通过句柄进行操作

         句柄可以通过spy++获取到主窗口的句柄,然后就可以通过类名查找所有的子控件

   

         通过消息进行事件操作

         比如菜单选择,按钮点击,只需要调用相应的消息接口就可以了


         示例:操作记事本,功能为编辑记事本的内容,调用另存为菜单

'''
Created on 2017年9月26日

@author: Administrator
'''

#! /usr/local/bin/python
# encoding: utf-8
import win32api
import win32gui
import win32con

print("Hello,world!")

def find_idxSubHandle(pHandle, winClass, index=0):
    """ 
                已知子窗口的窗体类名 
                寻找第index号个同类型的兄弟窗口 
    """  
    assert type(index) == int and index >= 0  
    handle = win32gui.FindWindowEx(pHandle, 0, winClass, None)  
    while index > 0:  
        handle = win32gui.FindWindowEx(pHandle, handle, winClass, None)  
        index -= 1  
    return handle  

def find_subHandle(pHandle, winClassList):  
    """ 
             递归寻找子窗口的句柄 
    pHandle是祖父窗口的句柄 
    winClassList是各个子窗口的class列表,父辈的list-index小于子辈 
    """  
    assert type(winClassList) == list  
    if len(winClassList) == 1:  
        return find_idxSubHandle(pHandle, winClassList[0][0], winClassList[0][1])  
    else:  
        pHandle = find_idxSubHandle(pHandle, winClassList[0][0], winClassList[0][1])  
        return find_subHandle(pHandle, winClassList[1:])  
    
"""输出phandle的所有子控件"""    
def p_sub_handle(phandle):
    handle = -1
    while handle !=0 :
        if handle == -1:
            handle = 0
        handle = win32gui.FindWindowEx(phandle, handle, None, None)
        if handle != 0:
            className = win32gui.GetClassName(handle)
            print(className)

"""
    记事本实例
"""
notepadHhandle = win32gui.FindWindow("Notepad", None)
print ("%x" % (notepadHhandle))

editHandle = find_subHandle(notepadHhandle, [("Edit",0)])
print ("%x" % (editHandle))

"""修改edit中的值"""
win32api.SendMessage(editHandle, win32con.WM_SETTEXT, 0, "666666")

command_dict = {  # [目录的编号, 打开的窗口名]  
            "open": [3, u"打开"]
        }  

"""操作菜单"""
menu = win32gui.GetMenu(notepadHhandle)
menu = win32gui.GetSubMenu(menu, 0)  
cmd_ID = win32gui.GetMenuItemID(menu, command_dict["open"][0])
if cmd_ID == -1:
    print("没有找到相应的菜单")
else:
    print ("菜单id:%x" % (cmd_ID))
win32gui.PostMessage(notepadHhandle, win32con.WM_COMMAND, cmd_ID, 0)   


  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值