當前位置:
首頁 >
python---win32gui、win32con、win32api:winAPI操作
發布時間:2023/12/15
49
生活家
生活随笔
收集整理的這篇文章主要介紹了
python---win32gui、win32con、win32api:winAPI操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
python操作winAPI
窗口操作:
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
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) #右鍵單擊
總結
以上是生活随笔為你收集整理的python---win32gui、win32con、win32api:winAPI操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习之基于Inception_Res
- 下一篇: windows ie浏览器如何清除浏览器