1.如何利用句柄操做windows窗體python
首先,得到窗體的句柄 win32api.FindWindows()windows
第二,得到窗體中控件的id號,spy++api
第三,根據控件的ID得到控件的句柄(hwnd) GetDlgItem(hwnd,loginID)瀏覽器
最後,利用控件句柄進行操做post
python能夠經過win32api輕鬆獲取控件的屬性值ui
經過標籤找到主窗口句柄,而後經過主句柄獲取下屬控件句柄編碼
#-*- coding: utf-8 -*- ##設置編碼方式spa
import win32api,win32gui,win32conutf-8
label = 'tt' #此處假設主窗口名爲ttit
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')