博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python和pywin32实现窗口查找、遍历和点击
阅读量:5775 次
发布时间:2019-06-18

本文共 2248 字,大约阅读时间需要 7 分钟。

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')

 

转载地址:http://kghux.baihongyu.com/

你可能感兴趣的文章
javascript 基础(typeof和instanceof)
查看>>
Mysql中错误日志、binlog日志、查询日志、慢查询日志简介
查看>>
git总结
查看>>
链表实现图书管理
查看>>
TP5+layui表格使用(更新中)
查看>>
Object类中的toString()方法
查看>>
百度统计图表Echarts的php实现类,支持柱形图、线形图、饼形图
查看>>
postgresql数据库体系结构
查看>>
spring mvc 基础配置
查看>>
skyline 加载wms图层
查看>>
微招聘:我说的不只是概念
查看>>
mysql 数据库的导入导出
查看>>
HTML5播放器 MediaElement.js 使用方法
查看>>
精通Java设计模式从初见到相爱之责任链设计模式(14)
查看>>
我的友情链接
查看>>
【shell】Linux shell函数入门讲解
查看>>
windows不能查询组策略对象列表解决办法
查看>>
Android SQLite数据操作 【学习记录】
查看>>
shell脚本实现机房服务器巡检(初步)
查看>>
h3c无线控制器常用命令(wx)
查看>>