python---win32gui、win32con、win32api:winAPI操做

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)  #右鍵單擊

 

 

 

 

 

 

相關文章
相關標籤/搜索