spy++软件可以获取窗口的句柄

1.句柄是一个32位的整数,在windows中标记对象,通过句柄可以操作对象

2.消息是windows应用中的重要部分,用来告诉窗体发生了什么,参照文章

3.模块:win32api,win32con,win32gui

win32api顾名思义,就是用python对win32的本地api进行了封装;

win32con个人理解为win32constant,即win32的常量定义

下面介绍一些常用的方法

1.查找窗口句柄方法

在win32编程的世界里,包括窗口到文本框的所有控件就是窗体,所有的窗体都有独立的句柄。要操作任意一个窗体,你都需要找到这个窗体的句柄

  • FindWindow(lpClassName=None, lpWindowName=None):

    • 描述:自顶层窗口(也就是桌面)开始搜索条件匹配的窗体,并返回这个窗体的句柄。不搜索子窗口、不区分大小写。找不到就返回0
    • 参数:
      • lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
      • lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    • 说明:这个函数我们仅能用来找主窗口。
  • FindWindowEx(hwndParent=0, hwndChildAfter=0, lpszClass=None, lpszWindow=None);
    • 描述:搜索类名和窗体名匹配的窗体,并返回这个窗体的句柄。不区分大小写,找不到就返回0。
    • 参数:
      • hwndParent:若不为0,则搜索句柄为hwndParent窗体的子窗体。
      • hwndChildAfter:若不为0,则按照z-index的顺序从hwndChildAfter向后开始搜索子窗体,否则从第一个子窗体开始搜索。
      • lpClassName:字符型,是窗体的类名,这个可以在Spy++里找到。
      • lpWindowName:字符型,是窗口名,也就是标题栏上你能看见的那个标题。
    • 说明:找到了主窗口以后就靠它来定位子窗体啦。
  • EnumWindows(callback, extra)
    Enumerates all top-level windows on the screen by passing the handle to each window, in turn, to an application-defined callback function.
    Parameters
    callback : function
    A Python function to be used as the callback. Function can return False to stop enumeration, or raise an exception.
    extra : object
    Any python object - this is passed to the callback function as the second param (first is the hwnd).

    EnumChildWindows(hwnd, callback, extra)
    Enumerates the child windows that belong to the specified parent window by passing the handle to each child window, in turn, to an application-defined callback function.EnumChildWindows continues until the last child window is enumerated or the callback function returns FALSE.
    Parameters
    hwnd : PyHANDLE
    The handle to the window to enumerate.
    callback : object
    A Python function to be used as the callback.
    extra : object
    Any python object - this is passed to the callback function as the second param (first is the hwnd).

2.菜单操作方法

  • GetMenu(hwnd)

    • 描述:获取窗口的菜单句柄。
    • 参数:
      • hwnd:整型,需要获取菜单的窗口的句柄。
    • 说明:获取的是插图中黄色的部分。
  • GetSubMenu(hMenu, nPos)
    • 描述:获取菜单的下拉菜单或者子菜单。
    • 参数:
      • hMenu:整型,菜单的句柄,从GetMenu获得。
      • nPos:整型,下拉菜单或子菜单的的索引,从0算起。
    • 说明:这个可以获取插图中蓝色的部分z;如描述所述,这个不仅可以获取本例中的下拉菜单,还可以获取子菜单。
  • GetMenuItemID(hMenu, nPos)
    • 描述:获取菜单中特定项目的标识符。
    • 参数:
      • hMenu:整型,包含所需菜单项的菜单句柄,从GetSubMenu获得。
      • nPos:整型,菜单项的索引,从0算起。
    • 说明:这个获取的就是红色区域中的项目啦,注意,分隔符是被编入索引的,所以Open的索引是2而非1,而Exit的索引是9而非6。

3.向窗口发送消息,操作窗口

PostMessage和SendMessage的区别就在于我们可以通过SendMessage取得消息的返回信息。因为对于我们要设置文本框信息的WM_SETTEXT信息来说,设置成功将返回True

  • SendMessage(hWnd, Msg, wParam, lParam)

    • 描述:在消息队列中加入为指定的窗体加入一条消息,直到窗体处理完信息才返回。
    • 参数:
      • hWnd:整型,接收消息的窗体句柄
      • Msg:整型,要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages).aspx#system_defined)
      • wParam:整型,消息的wParam参数
      • lParam:整型,消息的lParam参数
    • 说明:wParam和IParam根据具体的消息不同而有不同的定义,详情参阅Part 2.
  • PostMessage(hWnd, Msg, wParam, lParam)
    • 描述:在消息队列中加入为指定的窗体加入一条消息,并马上返回,不等待线程对消息的处理。
    • 参数:
      • hWnd:整型,接收消息的窗体句柄
      • Msg:整型,要发送的消息,这些消息都是windows预先定义好的,可以参见系统定义消息(System-Defined Messages))
      • wParam:整型,消息的wParam参数
      • lParam:整型,消息的lParam参数
    • 说明:简单说,就是给指定程序发一个消息,这些消息都用整型编好号,作为windows的常量可以查询的。在这里,我们用的就是win32con这个库里定义的WM_COMMAND这个消息,具体的wParam和lParam是根据消息的不同而不同的。具体请根据MSDN查阅

4.消息

  • WM_SETTEXT 消息

    • 描述:设置窗体的文本
    • 参数:
      • wParam:未使用
      • lParam:一个指针,指向以null结尾的字符串。窗体文本将被设置为该字符串。
    • 返回值:
      • 如果成功设置,则返回1(MSDN原文是返回True)
    • 说明:
      • 上面的定义是直接从MSDN上翻译过来的,在Python的语境里面没有指针,你只需要把变量名作为lParam传入就好了。
      • 另外,请注意编码,包含中文请用gbk编码,否则乱码
  • WM_COMMAND 消息
    • 描述:当用户选择了菜单(或按钮等控件的)命令,或控件发送通知到父窗口,或加速键击(accelerator keystroke is translated)时发送。
    • 参数:根据情景不同而不同,在这里属于用户命令,参数配置如下
      • wParam:HIWORD为0(未使用),LOWORD为控件的ID
      • lParam:0(未使用)
    • 返回值:如果窗体处理了消息,应返回0
  • WM_GETTEXT 消息:

    • 描述:将窗体的文本内容复制到指定的buffer对象中
    • 参数:
      • wParam:要复制字符的最大长度,包括截尾的空字节
      • lParam:用来保存字符串的buffer的指针
    • 返回值:返回复制字符的数量,不包括截尾的空字节

向窗口发送回车

win32gui.SendMessage(tid, win32con.WM_SETTEXT, None, ‘hello')
win32gui.PostMessage(tid, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)
win32gui.PostMessage(tid, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

http://blog.csdn.net/seele52

http://lixxu.iteye.com/blog/417218

http://blog.csdn.net/huiguixian/article/details/6968931

python win32编程相关推荐

  1. 利用Python和win32编程范例——按需定制一个按键精灵

    转自:作者 橘子一方 http://www.orangecube.net/articles/python-win32-example.html 利用Python和win32编程范例--按需定制一个按键 ...

  2. python pywin32 相同句柄_如何利用Python和win32编程避免重复性体力劳动(一)——开始、FindWindow和FindWindowEx...

    请移步至这里以获得更加的排版和阅读体验,谢谢您 本系列文章假设各位看官对python是足够熟悉的,但却不太了解win32编程. 嘛..其实我也没学过win32编程,脸请各位看官随意招呼. 需求:最近因 ...

  3. 如何利用Python和win32编程避免重复性体力劳动(一)——开始、FindWindow和FindWindowEx

    本博客正逐步迁移至OrangeCube四次元 请移步至这里以获得更加的排版和阅读体验,谢谢您 本系列文章假设各位看官对Python是足够熟悉的,但却不太了解win32编程. 嘛..其实我也没学过win ...

  4. Python GUI编程-了解相关技术[整理]

    Python GUI编程-了解相关技术[整理] 我们可以看到,其实python进行GUI开发并没有自身的相关库,而是借用第三方库进行开发.tkinter是tcl/tk相关,pyGTK是Gtk相关,wx ...

  5. python和vb的代码可以通用吗-VB6+Python混合编程(COM组件)(转)

    VB6+Python混合编程(COM组件) 0.2572018.05.10 16:01:23字数 553阅读 3725 Python的方便不用说,VB6做GUI的简单程度更不用说.二者混合编程的需求一 ...

  6. python核心编程--笔记(不定时跟新)(转)

    的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找python路径 1.4 –v   ...

  7. Python CGI编程详细步骤,和说说我踩的坑!!

    最近在学python,刚接触python高级编程-gci编程,照着网上的资料去配置文件 ,但是其中遇到了很多问题,可以说一天都呆坑里,特记录下这些,总结下,也以便帮小伙伴们解决问题. 我参考的是这篇文 ...

  8. 《Python计算机视觉编程》一书中关于增强现实茶壶显示的程序

    大家好,我是第一次写CSDN博客,也是刚开始学习用Python进行计算机视觉编程,有很多不懂和不足的地方,希望大家多包涵.以下纯粹是我个人的一些实际操作经历. 在<Python计算机视觉编程&g ...

  9. 《Python核心编程(第3版)》学习笔记及书评

    <Python核心编程(第3版)>学习笔记 文章目录 <Python核心编程(第3版)>学习笔记 写在前面 1. 正则表达式 1.1 常用语法 1.2 re模块 2. 网络编程 ...

最新文章

  1. linux杂谈(二十):apache服务配置
  2. Mysql - Binlog
  3. idea中如何将一个普通项目转换为maven项目
  4. 插画素材模板 | 玩转电商促销季插画设计
  5. 推荐的字符与字符串处理方式
  6. vfp 调用接口取数据_2分钟教你调用全国天气预报数据接口
  7. 【机器学习】算法调参
  8. poj 2987 Firing (最大权 闭合 图)
  9. PPT幻灯片放映计时器
  10. linux 备份 网络配置,如何备份已经配置好的虚拟机linux系统的网络..._网络编辑_帮考网...
  11. 红蜻蜓抓图精灵抓视频播放器画面结果一片漆黑解决教程
  12. Kubernetes学习-K8S安装篇-Kubeadm安装高可用K8S集群
  13. python鼠标绘图_python opencv入门 鼠标绘图(4)
  14. 史上最详细!嵌入式系统知识和接口技术总结
  15. 如何解释准确率、精确率与召回率?
  16. ESP8266_GET请求天气预报、json解析
  17. 话说linux内核-uboot和系统移植第14部分-朱有鹏-专题视频课程
  18. PC向手机进行拨号上网 DUN
  19. 【FatFs】基于STM32 SD卡移植FatFs文件系统
  20. AutoCAD Civil 3D-创建道路模型(2 道路的挖填方量计算及条件部件)

热门文章

  1. Linux的super super super easy教程 | 用户和组
  2. 计算机英语报告,计算机英语论文英文版
  3. 狼人琵琶计算机谱子,浪人琵琶钢琴简谱-数字双手-摩登兄弟
  4. [tts] 基于Merlin的英文语音合成实战
  5. java 逻辑与运算符,Java逻辑运算符与为运算符
  6. java 逻辑运算符的概念和使用
  7. jq给元素添加或删除类名
  8. 反向传播算法推导过程(看一篇就够了)
  9. 037基于深度学习识别中药饮片数据集网页版
  10. linux中stty参数,Linux如何使用stty命令