python win32编程

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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值