python模塊詳解之pywin32使用文檔(python操作windowsAPI)
一、pywin32簡介
1、windowsAPI是什么
Windows API(Application Programming Interface)是一組函數(shù)、數(shù)據(jù)結(jié)構(gòu)、指令集等的集合,用于操作和控制Windows操作系統(tǒng)的各種功能和特性。它提供了一種通過編程方式與Windows進(jìn)行交互的接口。
Windows API允許開發(fā)人員使用編程語言(如C/C++、Python等)調(diào)用和使用Windows操作系統(tǒng)的內(nèi)部功能,如創(chuàng)建和管理進(jìn)程、訪問和修改文件系統(tǒng)、讀取和寫入注冊(cè)表、繪制圖形、操作窗口和控件、網(wǎng)絡(luò)通信等。通過Windows API,開發(fā)人員可以利用操作系統(tǒng)提供的功能和資源,構(gòu)建各種類型的應(yīng)用程序。
Windows API以動(dòng)態(tài)鏈接庫(DLL)的形式提供,開發(fā)人員可以通過引入相應(yīng)的庫文件并使用庫中的函數(shù)和數(shù)據(jù)結(jié)構(gòu),來實(shí)現(xiàn)對(duì)特定功能的調(diào)用和操作。使用Windows API可以完成從底層系統(tǒng)操作到高級(jí)應(yīng)用程序開發(fā)的各個(gè)層次的任務(wù)。
Windows API是使用非常廣泛的API之一,廣泛應(yīng)用于Windows軟件開發(fā)、系統(tǒng)編程、驅(qū)動(dòng)程序開發(fā)等領(lǐng)域。
win32API參考手冊(cè):http://www.yfvb.com/help/win32sdk/index.htm
微軟win32API手冊(cè):https://learn.microsoft.com/zh-cn/windows/win32/
2、pywin32模塊
pywin32是一個(gè)Python擴(kuò)展模塊,它提供了與Windows操作系統(tǒng)的API進(jìn)行交互的功能。具體而言,pywin32模塊可以用于在Python中調(diào)用和操作Windows的各種系統(tǒng)功能,包括但不限于以下功能:
- 與Windows API的交互:pywin32提供了對(duì)Windows的API函數(shù)的封裝,使得在Python中可以直接調(diào)用這些API函數(shù)進(jìn)行操作,如創(chuàng)建和管理進(jìn)程、訪問和修改注冊(cè)表、操作文件和文件夾等。
- COM組件和ActiveX對(duì)象的操作:pywin32支持使用COM技術(shù)(Component Object Model)與Windows操作系統(tǒng)中的COM組件進(jìn)行交互。通過pywin32,可以創(chuàng)建、操縱和使用COM組件、ActiveX對(duì)象和OLE對(duì)象,實(shí)現(xiàn)與Windows應(yīng)用程序和組件的集成。
- Windows服務(wù)的管理:pywin32提供了管理Windows服務(wù)的功能,可以通過pywin32創(chuàng)建和管理Windows服務(wù),包括安裝、啟動(dòng)、停止和刪除Windows服務(wù)。
- GUI編程:pywin32模塊還提供了與Windows的圖形用戶界面(GUI)進(jìn)行交互的功能。它可以創(chuàng)建和操作Windows窗口、對(duì)話框,以及訪問和修改窗口控件的屬性和事件。
總之,pywin32模塊提供了豐富的功能和方法,可以在Python中直接調(diào)用Windows操作系統(tǒng)的API,實(shí)現(xiàn)與Windows相關(guān)的操作和功能。
該項(xiàng)目是開源的,地址為:https://github.com/mhammond/pywin32
api地址為:http://timgolden.me.uk/pywin32-docs/contents.html
3、安裝pywin32
# 直接安裝 pip install pywin32
安裝完成之后,在python安裝目錄下:\Lib\site-packages,會(huì)有一個(gè)PyWin32.chm文件,就是使用文檔。
pywin32把Windows API按照功能分了一些大類,每一個(gè)大類作為一個(gè)模塊。以下是所有的模塊:
_winxptheme:提供專為xp系統(tǒng)的主題API
mmapfile:編譯的擴(kuò)展模塊,提供對(duì)內(nèi)存映射文件API的訪問
odbc:odb數(shù)據(jù)庫api
perfmon:包裝性能監(jiān)視器功能的模塊。
pywintypes:支持常見 Windows 類型的模塊。
servicemanager:與 Windows 服務(wù)控制管理器交互的模塊。
timer:包裝 Win32 Timer 函數(shù)的擴(kuò)展
win2kras:將 Windows 2000 擴(kuò)展封裝到遠(yuǎn)程訪問服務(wù) (RAS) API 的模塊。
win32api:提供了常用的用戶API
win32clipboard:提供了有關(guān)粘貼板的API
win32con:有關(guān)的常量
win32console:控制臺(tái)
win32cred:憑證管理功能的接口。此模塊中的功能僅適用于 Windows XP 及更高版本。
win32crypt:win32 Cryptography API 的接口
win32event:提供了win32事件/等待API
win32evtlog:封裝了 Windows Win32 事件日志 API。
win32file:提供了有關(guān)文件操作的API
win32gui:提供了有關(guān)windows用戶界面圖形操作的API
win32help:Win32 help API’s
win32inet:Windows internet (wininet) API的接口
win32job:win32進(jìn)程和線程API的接口,可在Windows 2000及更高版本中使用。
win32lz:封裝 Windows LZ 壓縮例程的模塊
win32net:Windows internet (wininet) API的接口
win32pdh:封裝了Windows性能數(shù)據(jù)助手API
win32pipe:管道api
win32print:封裝Windows打印API
win32process:進(jìn)程api
win32profile:包裝用于處理用戶配置文件的函數(shù)
win32ras:封裝Windows遠(yuǎn)程訪問服務(wù)(RAS) API
win32security:win32安全API的接口
win32service:服務(wù)
win32trace
win32transaction:用于事務(wù)化的NTFS和事務(wù)化的注冊(cè)表函數(shù)
win32ts:這個(gè)模塊中的所有函數(shù)都接受關(guān)鍵字參數(shù)
win32wnet:公開Windows網(wǎng)絡(luò)API
winxpgui:xp圖像用戶界面API
二、常用模塊:pywintypes
0、使用
使用前需要引入:
import pywintypes
1、CreateGuid:生成唯一標(biāo)識(shí)符
返回一個(gè)字符串,格式為{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
。
PyIID = pywintypes.CreateGuid() print(PyIID) # {BB02ECB7-BC18-4336-A65C-C9C0CE548020}
三、常用模塊:win32api
0、使用
使用前需要引入:
import win32api
1、AbortSystemShutdown:關(guān)機(jī)
import win32api # 取消系統(tǒng)關(guān)閉操作 win32api.AbortSystemShutdown(computer_name=None)
該方法的參數(shù)computer_name
是可選的,用于指定要取消系統(tǒng)關(guān)閉操作的計(jì)算機(jī)名稱。如果未提供computer_name
參數(shù),則默認(rèn)為本地計(jì)算機(jī)。
注意:該方法要求以管理員權(quán)限運(yùn)行,否則會(huì)拋出權(quán)限錯(cuò)誤。
2、Beep:發(fā)出聲音
import win32api # 發(fā)出一次短促的蜂鳴聲 win32api.Beep(freq, duration)
該方法接受兩個(gè)參數(shù):
freq
:表示發(fā)聲的頻率,以赫茲(Hz)為單位。常見的頻率可以嘗試使用440
(標(biāo)準(zhǔn)音A)。duration
:表示發(fā)聲持續(xù)的時(shí)間,以毫秒(ms)為單位。
請(qǐng)注意,該方法可能不適用于所有的計(jì)算機(jī)和操作系統(tǒng)。在某些系統(tǒng)中可能無法產(chǎn)生蜂鳴聲音。
3、ClipCursor:限制鼠標(biāo)范圍
在pywin32
模塊中,win32api.ClipCursor
方法用于限制鼠標(biāo)光標(biāo)的移動(dòng)范圍在指定的矩形區(qū)域內(nèi)。
import win32api # 定義矩形的左上角和右下角坐標(biāo) left, top, right, bottom = 100, 100, 500, 500 # 創(chuàng)建矩形對(duì)象 rect = (left, top, right, bottom) # 限制鼠標(biāo)光標(biāo)的移動(dòng)范圍 win32api.ClipCursor(rect) # 取消限制,恢復(fù)正常的鼠標(biāo)光標(biāo)移動(dòng)范圍 win32api.ClipCursor(None)
在這個(gè)示例中,首先我們定義了一個(gè)矩形區(qū)域的左上角和右下角坐標(biāo)。然后,使用win32api.ClipCursor方法將鼠標(biāo)光標(biāo)的移動(dòng)范圍限制在該矩形區(qū)域內(nèi),傳入矩形的坐標(biāo)參數(shù)。最后,使用win32api.ClipCursor(None)取消對(duì)鼠標(biāo)光標(biāo)移動(dòng)范圍的限制,恢復(fù)正常的移動(dòng)范圍。
注意:在使用win32api.ClipCursor
方法之后,記得一定要及時(shí)取消限制,以免造成鼠標(biāo)無法移動(dòng)的情況。
4、CloseHandle:關(guān)閉文件句柄
在pywin32
模塊中,win32api.CloseHandle
方法用于關(guān)閉一個(gè)句柄(handle)。
import win32api # 打開或創(chuàng)建一個(gè)文件,并獲取文件的句柄 handle = win32api.CreateFile("path/to/file", win32api.GENERIC_READ, 0, None, win32api.OPEN_EXISTING, 0, None) # 使用句柄進(jìn)行一些操作 # 關(guān)閉句柄 win32api.CloseHandle(handle)
在這個(gè)示例中,首先我們使用win32api.CreateFile
方法打開或創(chuàng)建一個(gè)文件,并獲取文件的句柄。然后,使用這個(gè)句柄進(jìn)行一些操作。最后,使用win32api.CloseHandle
方法關(guān)閉句柄,確保資源的釋放和內(nèi)存的回收。
請(qǐng)注意,在使用完句柄后,務(wù)必記得及時(shí)關(guān)閉句柄,以免資源泄露或其他不可預(yù)見的問題。
5、CopyFile:復(fù)制文件
import win32api # 源文件路徑 src_file = "path/to/source/file" # 目標(biāo)文件路徑 dst_file = "path/to/destination/file" # 復(fù)制文件 win32api.CopyFile(src_file, dst_file)
CopyFile支持多傳一個(gè)int類型參數(shù):指示如果文件存在,操作是否應(yīng)該失敗,默認(rèn)為0。
6、DeleteFile:刪除文件
win32api.DeleteFile(fileName)
7、ExitWindows:注銷當(dāng)前用戶
在pywin32
模塊中,win32api.ExitWindows
方法用于執(zhí)行系統(tǒng)的關(guān)機(jī)、重啟、注銷或關(guān)閉等操作。
import win32api # 執(zhí)行關(guān)機(jī)操作(將在 30 秒后關(guān)機(jī)) win32api.ExitWindowsEx(win32api.EWX_SHUTDOWN | win32api.EWX_FORCE, 30)
在這個(gè)示例中,我們使用win32api.ExitWindowsEx
方法執(zhí)行關(guān)機(jī)操作。win32api.EWX_SHUTDOWN
指定了要執(zhí)行的操作為關(guān)機(jī)操作,win32api.EWX_FORCE
指定了強(qiáng)制執(zhí)行關(guān)機(jī)操作。最后的參數(shù) 30 表示延遲關(guān)機(jī)的時(shí)間,單位為秒(默認(rèn)為 0)。
除了關(guān)機(jī)操作,還可以使用其他參數(shù)來執(zhí)行其他操作,如重啟、注銷、鎖定等。以下是一些常用的系統(tǒng)操作參數(shù):
- win32api.EWX_LOGOFF:注銷
- win32api.EWX_REBOOT:重啟
- win32api.EWX_SHUTDOWN:關(guān)機(jī)
- win32api.EWX_POWEROFF:關(guān)閉電源(需要特權(quán))
可以根據(jù)需要選擇適合的操作參數(shù)。請(qǐng)注意,某些操作可能需要管理員權(quán)限才能執(zhí)行成功。
另外,也可以使用win32api.InitiateSystemShutdown方法進(jìn)行關(guān)機(jī)操作,它提供更多的自定義選項(xiàng)。
8、GetComputerName:獲取計(jì)算機(jī)名
import win32api # 獲取計(jì)算機(jī)名稱 computer_name = win32api.GetComputerName() print(f"Computer Name: {computer_name}")
9、GetCursorPos:返回鼠標(biāo)位置
import win32api a, b = win32api.GetCursorPos() print(a) print(b)
10、GetLocalTime:獲取當(dāng)前時(shí)間
# 結(jié)果:(2023, 11, 3, 15, 10, 12, 23, 214) win32api.GetLocalTime() win32api.GetSystemTime()
11、MessageBeep:發(fā)出預(yù)定義的聲音
win32api.MessageBeep(1)
12、TerminateProcess:終止進(jìn)程
import win32api import win32con # 根據(jù)進(jìn)程ID終止進(jìn)程 def kill_process_by_pid(pid): # 打開進(jìn)程句柄 handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, False, pid) if handle: # 終止進(jìn)程 win32api.TerminateProcess(handle, 0) # 關(guān)閉進(jìn)程句柄 win32api.CloseHandle(handle) # 根據(jù)進(jìn)程名稱終止進(jìn)程 def kill_process_by_name(name): import psutil for process in psutil.process_iter(['name', 'pid']): if process.info['name'] == name: pid = process.info['pid'] kill_process_by_pid(pid) # 終止名為"program_name.exe"的進(jìn)程 kill_process_by_name("program_name.exe")
在上面的代碼中,我們定義了兩個(gè)函數(shù):kill_process_by_pid()和kill_process_by_name()。kill_process_by_pid()函數(shù)使用進(jìn)程ID(pid)來終止進(jìn)程,而kill_process_by_name()函數(shù)使用進(jìn)程名稱來終止進(jìn)程。在kill_process_by_name()函數(shù)中,我們使用了psutil模塊來獲取正在運(yùn)行的進(jìn)程列表,并根據(jù)進(jìn)程名稱匹配要終止的進(jìn)程。
請(qǐng)注意,在使用win32api.TerminateProcess()函數(shù)時(shí),要謹(jǐn)慎操作,因?yàn)樗梢粤⒓唇K止進(jìn)程,而不進(jìn)行任何清理工作。
13、其他
還有各種內(nèi)存、文件、鼠標(biāo)、鍵盤等操作的。
四、剪切板模塊:win32clipboard
win32clipboard 模塊提供了對(duì) Windows 系統(tǒng)剪貼板的訪問。
以下是 win32clipboard 模塊的常用方法和屬性:
- OpenClipboard(hwnd):打開剪貼板。hwnd 是一個(gè)可選參數(shù),用于指定當(dāng)前活動(dòng)窗口的句柄。
- CloseClipboard():關(guān)閉剪貼板。
- EmptyClipboard():清空剪貼板。
- GetClipboardData(format):獲取剪貼板中的數(shù)據(jù)。format 是一個(gè)可選參數(shù),用于指定數(shù)據(jù)的格式。常見的格式有:
- win32con.CF_TEXT:文本格式
- win32con.CF_UNICODETEXT:Unicode 文本格式
- win32con.CF_DIB:位圖格式
- SetClipboardData(format, data):設(shè)置剪貼板中的數(shù)據(jù)。format 是數(shù)據(jù)的格式,data 是要設(shè)置的數(shù)據(jù)。
- IsClipboardFormatAvailable(format):檢查指定格式的數(shù)據(jù)是否在剪貼板中可用。
import win32clipboard import win32con # 打開剪貼板 win32clipboard.OpenClipboard() # 清空剪貼板 win32clipboard.EmptyClipboard() # 設(shè)置文本數(shù)據(jù) win32clipboard.SetClipboardData(win32con.CF_TEXT, b"Hello, World!") # 獲取文本數(shù)據(jù) data = win32clipboard.GetClipboardData(win32con.CF_TEXT) print(data) # 檢查指定格式的數(shù)據(jù)是否可用 is_available = win32clipboard.IsClipboardFormatAvailable(win32con.CF_UNICODETEXT) print(is_available) # 關(guān)閉剪貼板 win32clipboard.CloseClipboard()
上述代碼打開剪貼板,清空剪貼板,設(shè)置文本數(shù)據(jù),獲取文本數(shù)據(jù),并檢查指定格式的數(shù)據(jù)是否可用,最后關(guān)閉剪貼板。
五、文件模塊:win32file
win32file模塊是pywin32模塊中的一個(gè)子模塊,用于處理Windows文件和文件系統(tǒng)的相關(guān)操作。
win32file模塊提供了一些方法和常量來處理文件的讀寫、文件屬性的獲取和設(shè)置、文件系統(tǒng)的操作等。以下是這個(gè)模塊的一些常用方法和功能的詳細(xì)說明:
CreateFile(filename, access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file):創(chuàng)建或打開一個(gè)文件,并返回一個(gè)文件句柄。
- CloseHandle(handle):關(guān)閉一個(gè)文件句柄。
- ReadFile(handle, buffer, overlapped):從文件中讀取數(shù)據(jù),并將結(jié)果存入指定的緩沖區(qū)。
- WriteFile(handle, buffer, overlapped):將數(shù)據(jù)寫入文件。
- GetFileSize(handle):獲取指定文件的大小。
- SetFileAttributes(filename, file_attributes):設(shè)置文件的屬性,比如只讀、隱藏等。
- GetFileAttributes(filename):獲取文件的屬性。
- DeleteFile(filename):刪除指定的文件。
- GetFileInformationByHandle(handle):通過文件句柄獲取文件的信息,如文件大小、創(chuàng)建時(shí)間等。
- FindFirstFile(filename):查找指定文件/文件夾,并返回一個(gè)用于遍歷結(jié)果的搜索句柄。
- FindNextFile(handle):通過搜索句柄獲取下一個(gè)文件/文件夾的信息。
- FindClose(handle):關(guān)閉搜索句柄。
這些方法提供了對(duì)文件和文件系統(tǒng)進(jìn)行操作的功能??梢允褂眠@些方法來創(chuàng)建、打開、讀寫文件,獲取和設(shè)置文件屬性,刪除文件,遍歷文件夾等等。在使用這些方法之前,需要先安裝pywin32模塊,并導(dǎo)入win32file模塊。
下面是一個(gè)示例代碼,演示了如何使用win32file模塊讀取文件的內(nèi)容和獲取文件的大?。?/p>
# 我們使用CreateFile方法打開指定的文件,然后使用GetFileSize方法獲取文件的大小。接著,我們調(diào)用ReadFile方法讀取文件的內(nèi)容,并將結(jié)果返回。最后,我們使用CloseHandle方法關(guān)閉文件句柄。 #注意,在使用win32file模塊時(shí),需要有管理員權(quán)限或具有適當(dāng)?shù)臋?quán)限來訪問和操作文件。 import win32file def read_file(filename): try: # 打開文件 handle = win32file.CreateFile(filename, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, 0, 0) # 獲取文件大小 file_size = win32file.GetFileSize(handle) # 讀取文件內(nèi)容 buffer = win32file.ReadFile(handle, file_size) # 關(guān)閉文件句柄 win32file.CloseHandle(handle) return buffer except Exception as e: print("Error:", e) # 讀取文件內(nèi)容 filename = "test.txt" file_content = read_file(filename) print(file_content)
六、ui模塊:win32gui
1、常用方法
win32gui模塊定義了windows窗口的常用方法:
import win32gui # 獲取窗口句柄 hwnd = win32gui.FindWindow(None, "窗口標(biāo)題") print(hwnd)
# 獲取窗口位置和大?。? import win32gui hwnd = win32gui.FindWindow(None, "窗口標(biāo)題") rect = win32gui.GetWindowRect(hwnd) left, top, right, bottom = rect print("窗口位置:(左:{}, 上:{})".format(left, top)) print("窗口大?。?寬:{}, 高:{})".format(right - left, bottom - top))
# 獲取窗口的父窗口和子窗口: import win32gui hwnd = win32gui.FindWindow(None, "窗口標(biāo)題") parent_hwnd = win32gui.GetParent(hwnd) child_hwnds = [] win32gui.EnumChildWindows(hwnd, lambda hwnd, param: param.append(hwnd), child_hwnds) print("父窗口句柄:", parent_hwnd) print("子窗口句柄:", child_hwnds)
# 設(shè)置窗口標(biāo)題: import win32gui hwnd = win32gui.FindWindow(None, "窗口標(biāo)題") win32gui.SetWindowText(hwnd, "新的窗口標(biāo)題")
2、獲取窗口并設(shè)為活躍窗口
import win32gui window_name = "窗口標(biāo)題" # 通過窗口名稱獲取窗口句柄 hwnd = win32gui.FindWindow(None, window_name) if hwnd != 0: # 將窗口設(shè)為活躍窗口 win32gui.SetForegroundWindow(hwnd) print("窗口已設(shè)為活躍") else: print("未找到該窗口")
該代碼只會(huì)將窗口設(shè)為活躍,并不會(huì)將其移動(dòng)到前臺(tái)。如果窗口已最小化或位于其他桌面,它可能不會(huì)立即顯示在屏幕上。
總結(jié)
到此這篇關(guān)于python模塊詳解之pywin32使用文檔的文章就介紹到這了,更多相關(guān)python模塊pywin32使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
2行Python代碼實(shí)現(xiàn)給pdf文件添加水印
你們?cè)诮oPDF文件添加水印時(shí),還在手動(dòng)一頁頁添加嗎?本文小編為大家?guī)砹艘粋€(gè)更方便的方法,即用Python的2行代碼來實(shí)現(xiàn),感興趣的小伙伴可以學(xué)習(xí)一下2022-02-02Python學(xué)習(xí)之Django的管理界面代碼示例
這篇文章主要介紹了Python學(xué)習(xí)之Django的管理界面代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02python實(shí)現(xiàn)手勢識(shí)別的示例(入門)
這篇文章主要介紹了python實(shí)現(xiàn)手勢識(shí)別的示例(入門),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Python繪圖系統(tǒng)之自定義一個(gè)坐標(biāo)列表控件
這篇文章主要為大家詳細(xì)介紹了Python如何編寫一個(gè)繪圖系統(tǒng),可以實(shí)現(xiàn)自定義一個(gè)坐標(biāo)列表控件,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-08-08python 獲取list特定元素下標(biāo)的實(shí)例講解
下面小編就為大家分享一篇python 獲取list特定元素下標(biāo)的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python pandas進(jìn)行數(shù)據(jù)預(yù)處理的實(shí)現(xiàn)
本案例通過使用pandas庫對(duì)電子商務(wù)客戶數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理,包括數(shù)據(jù)導(dǎo)入、查看、缺失值處理等處理,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01