python操做winAPIpython
窗口操做:
import sys from PyQt5.QtWidgets import QApplication, QWidget from lianxi import Ui_Form from PyQt5.QtCore import Qt import win32gui #winAPI模塊--以便於操做窗口 class Win(QWidget,Ui_Form): def __init__(self): super(Win, self).__init__() self.setupUi(self) self.setWindowFlag(Qt.MSWindowsFixedSizeDialogHint) # 窗體不能調整大小 self.setWindowTitle('練習') def lianxi1(self): #win32gui按鈕的槽函數 self.hwnd = win32gui.GetForegroundWindow() # 獲取最前窗口句柄 self.hwnd = win32gui.FindWindow(0, wdname) # 根據窗口標題,取得窗口句柄 # 函數功能:該函數得到一個頂層窗口的句柄,該窗口的類名和窗口名與給定的字符串相匹配。這個函數不查找子窗口。在查找時不區分大小寫 # 參數1 窗口類名 # 參數2 窗口標題--必須完整;若是該參數爲None,則爲全部窗口全匹配 # 返回值:若是函數成功,返回值爲窗口句柄;若是函數失敗,返回值爲0 #self.hwnd = win32gui.FindWindow("Notepad", None) # 根據窗口類名,取得窗口句柄 print('窗口句柄爲:', self.hwnd) if self.hwnd != 0: win32gui.SetForegroundWindow(self.hwnd) # 窗口顯示最前面 # 參數:窗口句柄 text = win32gui.GetWindowText(self.hwnd) # 獲取窗口標題 print('窗口標題爲:', text) clsname = win32gui.GetClassName(self.hwnd) #獲取窗口類名 print('窗口類名:',clsname) left, top, right, bottom = win32gui.GetWindowRect(self.hwnd) # 獲取窗口位置 #left, top是左上角座標;right, bottom是右下角座標 print('窗口位置',left, top, right, bottom) windows = [] #自定義參數,能夠是任何類型 #win32gui.EnumWindows(self.ss, windows) #尋找全部頂層窗口的句柄 #參數1:回調函數名稱,每找到一個句柄就把句柄和windows傳給a和b,並執行一次回調函數 #參數2:必須有,能夠向回調函數傳遞一些其它參數--傳給b,能夠是任何類型 #枚舉屏幕上的全部的頂層窗口,輪流地將這些窗口的句柄傳遞給回調函數的a參數。EnumWindows會一直進行下去,直到枚舉完全部的頂層窗口,或者回調函數返回了FALSE. #打開一個記事本 self.hwnd1 = win32gui.FindWindow("Notepad", None) print("父窗口句柄:",self.hwnd1) win32gui.EnumChildWindows(self.hwnd1,self.sss,windows) #尋找子窗口句柄 #參數1 父窗口句柄,若是此參數爲Null,則此函數等效於EnumWindows;每找到一個句柄就把句柄和windows傳給a和b,並執行一次回調函數 #參數2 回調函數 #參數3 自定義參數 #枚舉全部子窗口,輪流地將這些窗口的句柄傳遞給回調函數的a參數。函數會一直進行下去,直到枚舉完全部的子窗口,或者回調函數返回了FALSE #特別注意:qt只有一個窗體,裏面控件的句柄是找不到的--因此這條指令不能用在Qt繪製的窗口上 #打開彗星小助手 self.hwnd=win32gui.FindWindowEx(0,0,0,'彗星小助手') #查找窗口或子窗口句柄 #參數1 父窗口句柄;若是是 0, 則函數以桌面窗口爲父窗口;若是是 HWND_MESSAGE, 函數僅查找消息窗口 #參數2 子窗口句柄,必須是參數1的直接子窗口;子窗口以Z序排列,查找參數後面的子窗口;若是是 0, 查找從父窗口的第一個子窗口開始 #若是參數1和參數2同時是 0, 則函數查找全部的頂層窗口及消息窗口 #參數3 類名 #參數4 標題;能夠是None #返回找到的第一個窗口的句柄 print('彗星小助手的句柄:',self.hwnd) subHandle = win32gui.FindWindowEx(self.hwnd1, 0, "EDIT", None) # 筆記本類名爲EDIT的句柄 # 編輯框的句柄 menuHandle = win32gui.GetMenu(self.hwnd1) #獲取窗口的菜單句柄 #參數 窗口句柄 print('記事本菜單句柄:',menuHandle) subMenuHandle = win32gui.GetSubMenu(menuHandle, 0) # 得到子菜單或下拉菜單句柄 #參數1 菜單句柄 #參數2 子菜單索引號 print('子菜單文件句柄:',subMenuHandle) menuItemHandle = win32gui.GetMenuItemID(subMenuHandle, 0) # 得到菜單項中的的標誌符ID,注意,分隔符是被編入索引的 #參數1 子菜單句柄--文件菜單句柄 #參數2 項目索引號 #1 print(menuItemHandle) def sss(self,a,b): print(a,b) def ss(self,a,b): print(a,b) if __name__ == '__main__': app = QApplication(sys.argv) wdname = u'練習' demo = Win() demo.show() sys.exit(app.exec_())
代碼下載:https://pan.baidu.com/s/1YZ5ifLRO6lCxiJ2blRbMsg windows
hwnd=self.hwnd1 = win32gui.FindWindow("Notepad", None) i=win32gui.IsIconic(hwnd) #檢查窗口是否最小化 #是 返回1,不是返回0 win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL) #不要最小化
hwnd=win32gui.FindWindow("Notepad", None) win32gui.ShowWindow(hwnd, win32con.SW_HIDE) #隱藏窗口 time.sleep(2) win32gui.ShowWindow(hwnd, win32con.SW_SHOW) #顯示窗口 #SW_SHOW:在窗口原來的位置以原來的尺寸激活和顯示窗口
發送消息:
關閉窗口:
self.hwnd = win32gui.FindWindow(0, '練習') win32gui.PostMessage(self.hwnd, win32con.WM_CLOSE, 0, 0) #關閉窗口 #參數1 窗口句柄
handle = win32gui.FindWindow("Notepad", None) subHandle = win32gui.FindWindowEx(handle, 0, "EDIT", None) i=win32api.SendMessage(subHandle, win32con.WM_SETTEXT, 0, '我是中國人') #向窗口發送文本 #原文本所有被替換 #參數1 窗口句柄 #參數4 發送的文本 #等待窗口處理完畢後返回true
self.hwnd = win32gui.FindWindow("Notepad", None) bufSize = win32api.SendMessage(self.hwnd, win32con.WM_GETTEXTLENGTH, 0, 0) #獲取窗口文本的字符數
hwnd=win32gui.FindWindow("Notepad", None) win32gui.ShowWindow(hwnd, win32con.SW_HIDE) #隱藏窗口 time.sleep(2) win32gui.ShowWindow(hwnd, win32con.SW_SHOW) #顯示窗口 #SW_SHOW:在窗口原來的位置以原來的尺寸激活和顯示窗口
hwnd=win32gui.FindWindow("Notepad", None) win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE) #最大化指定的窗口。nCmdShow=3 win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE) #最小化指定的窗口而且激活在Z序中的下一個頂層窗口。nCmdShow=6
hwnd=win32gui.FindWindow("Notepad", None) win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) #激活並顯示窗口。若是窗口最小化或最大化,則系統將窗口恢復到原來的尺寸和位置。在恢復最小化窗口時,應用程序應該指定這個標誌。nCmdShow=9
hwnd=win32gui.FindWindow("Notepad", None) win32gui.ShowWindow(hwnd, win32con.SW_SHOWMAXIMIZED) #激活窗口並將其最大化。nCmdShow=3 # SW_SHOWMINIMIZED:激活窗口並將其最小化。nCmdShow=2。 # SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然維持激活狀態。nCmdShow=7。 # SW_SHOWNA:以窗口原來的狀態顯示窗口。激活窗口仍然維持激活狀態。nCmdShow=8。 # SW_SHOWNOACTIVATE:以窗口最近一次的大小和狀態顯示窗口。激活窗口仍然維持激活狀態。nCmdShow=4。 # SW_SHOWNORMAL:激活並顯示一個窗口。若是窗口被最小化或最大化,系統將其恢復到原來的尺寸和大小。應用程序在第一次顯示窗口的時候應該指定此標誌。nCmdShow=1。
鼠標操做:
win32api.SetCursorPos([30,150]) #鼠標定位到(30,50)--座標系屏幕 win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) #執行左單鍵擊,若須要雙擊則延時幾毫秒再點擊一次便可 win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) #右鍵單擊