Python ctypes模块调用API函数, 制作控制电脑其他窗口工具
有時, 需要使用程序自動控制某個窗口, 或者是系統默認的窗口樣式太單調, 想換一個樣式。
為此, 作者使用tkinter編寫了窗口控制工具, 而控制窗口又需要調用API函數。
先展示效果圖:
目錄
- 導入ctypes模塊
- 調用API函數
- 獲取窗口句柄
- 獲取/設置窗口標題
- 最小化/取消最小化
- 關閉窗口
- 更改窗體樣式
- 常見問題
- 總結
導入ctypes模塊
ctypes 是 Python 的外部函數庫。它提供了與 C 兼容的數據類型,并允許調用 DLL 或共享庫中的函數。導入ctypes模塊, 使用如下代碼即可:
from ctypes import *調用API函數
使用ctypes的windll對象可實現調用API函數的功能。
獲取窗口句柄
句柄(Handle, 簡稱hwnd)是一個是用來標識對象或者項目的標識符,可以用來描述窗體、文件等。獲取句柄后可實現窗口的控制。
winname = input('輸入窗口標題') hwnd = windll.user32.FindWindowW(c_char_p(None),winname) print(hwnd)獲取/設置窗口標題
需要使用GetWindowTextW, SetWindowTextW函數。set函數接收2個參數, 分別為句柄和一個字符串。
title=input('輸入新標題') windll.user32.SetWindowTextW(hwnd, title)get函數還需要一個字符串緩沖區, 使用create_string_buffer創建。
p = create_string_buffer(256) windll.user32.GetWindowTextW(hwnd,byref(p),256) # 獲取窗口標題 title = str(p.raw,encoding='utf-16').strip('\x00') # 解碼最小化/取消最小化
使用了CloseWindow, OpenIcon API函數; 函數接收1個參數, 為hwnd。
# 最小化 windll.user32.CloseWindow(hwnd) # 注意, 不是關閉窗口 # 取消最小化 windll.user32.OpenIcon(hwnd)關閉窗口
調用SendMessageA函數, 向窗口發送關閉消息即可。
WM_CLOSE = 0x10 windll.user32.SendMessageA(hwnd,WM_CLOSE,0,0)更改窗體樣式
窗體樣式分為兩類, 分別是GWL_STYLE和GWL_EXSTYLE 。
使用GWL_STYLE和GWL_EXSTYLE可實現多種效果。
注意: 使用GWL_STYLE時須在第三個參數中加入WS_VISIBLE,使窗口可用。
常見問題
另外, 有時需用到函數byref(), 以傳遞對象的引用。
3. 調用API時可能遇到編碼問題, 需要將數據轉換成Windows系統默認使用的ANSI編碼。
總結
使用ctypes庫的windll對象可實現調用各種API函數的功能。
完整源代碼見這里: 鏈接。
總結
以上是生活随笔為你收集整理的Python ctypes模块调用API函数, 制作控制电脑其他窗口工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用友oracle安装教程,用友NC安装在
- 下一篇: python解数独--世界最难数独2.3