zoukankan      html  css  js  c++  java
  • python和pywin32实现窗口查找、遍历和点击

    1.如何利用句柄操作windows窗体

    首先,获得窗体的句柄  win32api.FindWindows()

    第二,获得窗体中控件的id号,spy++

    第三,根据控件的ID获得控件的句柄(hwnd)  GetDlgItem(hwnd,loginID)

    最后,利用控件句柄进行操作

    python可以通过win32api轻松获取控件的属性值

    通过标签找到主窗口句柄,然后通过主句柄获取下属控件句柄

    #-*- coding: utf-8 -*-  ##设置编码方式

    import win32api,win32gui,win32con

    label = 'tt' #此处假设主窗口名为tt

    hld = win32gui.FindWindow(None, label)

    if hld > 0:

        dlg = win32api.FindWindowEx(hld, None, 'Edit', None)#获取hld下第一个为edit控件的句柄

        buffer = '0' *50

        len = win32gui.SendMessage(dlg, win32con.WM_GETTEXTLENGTH)+1 #获取edit控件文本长度

        win32gui.SendMessage(dlg, win32con.WM_GETTEXT, len, buffer) #读取文本

        print buffer[:len-1]

        #虚拟鼠标点击按钮(或者回车)

        btnhld = win32api.FindWindowEx(hld, None,'Button', None)

        # win32gui.PostMessage(btnhld, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)

        # win32gui.PostMessage(btnhld, win32con.WM_KEYUP, win32con.VK_RETURN, 0)

        win32gui.PostMessage(btnhld, win32con.WM_LBUTTONDOWN, win32con.MK_LBUTTON, 0)

        win32gui.PostMessage(btnhld, win32con.WM_LBUTTONUP, win32con.MK_LBUTTON, 0)

        #获取显示器屏幕大小

        width = win32api.GetSystemMetrics(win32con.SM_CXSCREEN)

        height = win32api.GetSystemMetrics(win32con.SM_CYSCREEN)


    #点击窗口button
    w=win32ui.FindWindow(clsname,windowtitle)
    b=w.GetDlgItem(窗口id)
    b.postMessage(win32con.BM_CLICK)


    #关闭窗体
    import win32ui
    import win32con
    wnd=win32ui.FindWindow(classname,None)
    wnd.SendMessage(win32con.WM_CLOSE)  成功!

    import win32ui
    w=win32ui.FindWindow(classname,窗体title)
    print w.GetDlgItemText(0xFFFF)  # 获得弹窗里的消息文字

    最小化窗体
    w=win32gui.FindWindow()
    win32gui.CloseWindow(w)

    浏览器密码控件操作

    # coding=utf-8

    import win32gui
    import win32api
    import win32con

    def CallBack(hwnd, hwnds):
    if win32gui.GetClassName(hwnd) == 'Edit':
    hwnds[win32gui.GetClassName(hwnd)] = hwnd
    return True


    w1hd = win32gui.FindWindow(u'IEFrame', None)

    print '%x' %w1hd
    # w2hd = win32gui.FindWindowEx(w1hd,0,u'TabWindowClass', None)

    # print '%x' %w2hd

    hwndChildList = {}
    win32gui.EnumChildWindows(w1hd, CallBack, hwndChildList)

    for k,v in hwndChildList.items():
    print '%s %x' %(k,v)
    #win32api.SendMessage(v, win32con.WM_CHAR, ord('a'), 0)
    #t1 =win32gui.GetDlgItem(v,1)
    len1 = win32gui.SendMessage(v, win32con.WM_GETTEXTLENGTH)+1
    buffer = '0' *50
    win32gui.SendMessage(v, win32con.WM_GETTEXT, len1, buffer)

    print len1
    print buffer[:len1-1]
    win32gui.SendMessage(v,win32con.WM_SETTEXT,None,'902723')

  • 相关阅读:
    腾讯一面有感(移动开发岗位)
    kafka 在java中的使用
    Kafka史上最详细原理总结下
    java jdk原生的http请求工具类
    kafka(一)
    MySQL:互联网公司常用分库分表方案汇总
    密码正则
    springboot 打war包
    oracle存储过程的一些使用
    对象的深度克隆
  • 原文地址:https://www.cnblogs.com/skying555/p/6137541.html
Copyright © 2011-2022 走看看