python 获取窗口句柄 模拟 点击按钮,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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值