Windows平臺Python編程必會模塊之pywin32介紹

 更新時間:2019年10月01日 12:57:15   作者:黑月教主   我要評論
在Windows平臺上,從原來使用C/C++編寫原生EXE程序,到使用Python編寫一些常用腳本程序,成熟的模塊的使用使得編程效率大大提高了

在Windows平臺上,從原來使用C/C++編寫原生EXE程序,到使用Python編寫一些常用腳本程序,成熟的模塊的使用使得編程效率大大提高了。

不過,python模塊雖多,也不可能滿足開發者的所有需求。而且,模塊為了便于使用,通常都封裝過度,有些功能無法靈活使用,必須直接調用Windows API來實現。

要完成這一目標,有兩種辦法,一種是使用C編寫Python擴展模塊,或者就是編寫普通的DLL通過python的ctypes來調用,但是這樣就部分犧牲掉了Python的快速開發、免編譯特性。

還好,有一個模塊pywin32可以解決這個問題,它直接包裝了幾乎所有的Windows API,可以方便地從Python直接調用,該模塊另一大主要功能是通過Python進行COM編程。

該項目是開源的,項目地址是:https://github.com/mhammond/pywin32

安裝時可以直接使用pip執行“pip install pywin32”來安裝它。

安裝完畢后,在Python安裝路徑下的Lib\site-packages\win32可以看到所有的API支撐模塊,Lib\site-packages\win32com下則是COM的支撐模塊。

在Lib\site-packages下有一個PyWin32.CHM幫助文件,相信對Windows編程有一定基礎的,看了這個幫助文件就能很快上手。

簡單說,pywin32把Windows API按照功能分了一些大類,每一個大類作為一個模塊。以下是所有的模塊:

mmapfile odbc perfmon servicemanager timer win2kras win32api win32clipboard win32console
win32cred win32crypt win32event win32evtlog win32file win32gui win32help win32inet win32job
win32lz win32net win32pdh win32pipe win32print win32process win32profile win32ras win32security
win32service win32trace win32transaction win32ts win32wnet winxpgui

比如文件類API就在模塊win32file中,進程類API在模塊win32process中。

在使用的時候,按需導入相關模塊就行了,win32con則定義了所有的常量,幾乎是必不可少的,一些難以分類的API則在模塊win32api中(大部分是kernel32.dll導出的API)。

部分模塊之間還存在一些交叉,比如CreateFile的參數中用到的GENERIC_READ常量,在win32con中有定義,在win32file中也有定義。

用戶只要大概知道這個是文件API用到的常量,那么不管你寫win32file.GENERIC_READ還是win32con.GENERIC_READ都是可以的。

關閉句柄用的CloseHandle函數也是在兩個模塊中都有定義的。

需要注意的是,微軟提供的Wsa系列網絡API也都在win32file模塊中,因為很多操作系統都是把套接字也用為文件對象來操作的。

如果你不清楚要使用的API在哪個模塊中,那就到幫助文件里搜索一下,一定會給你答案的。

如果你只是對pywin32中如何調用某個API不熟悉,那么查看Pywin32.CHM就足夠了,如果你對API本身的參數定義和使用不熟悉,那還得繼續看MSDN。

下面來寫一個Helloworld作為開始吧:

import win32api
import win32con
win32api.MessageBox(None,"Hello,pywin32!","pywin32",win32con.MB_OK)

效果如下:

在Lib\site-packages\win32\Demos目錄下有許多例子,如果你還不清楚pywin32怎么上手,來看看這些例子就知道了。

比如使用API進行文件操作:

# This is a "demo" of win32file - it used to be more a test case than a
# demo, so has been moved to the test directory.
 
# Please contribute your favourite simple little demo.
import win32file, win32api, win32con
import os
 
# A very simple demo - note that this does no more than you can do with
# builtin Python file objects, so for something as simple as this, you
# generally *should* use builtin Python objects. Only use win32file etc
# when you need win32 specific features not available in Python.
def SimpleFileDemo():
  testName = os.path.join( win32api.GetTempPath(), "win32file_demo_test_file")
  if os.path.exists(testName): os.unlink(testName)
  # Open the file for writing.
  handle = win32file.CreateFile(testName,
                 win32file.GENERIC_WRITE,
                 0,
                 None,
                 win32con.CREATE_NEW,
                 0,
                 None)
  test_data = "Hello\0there".encode("ascii")
  win32file.WriteFile(handle, test_data)
  handle.Close()
  # Open it for reading.
  handle = win32file.CreateFile(testName, win32file.GENERIC_READ, 0, None, win32con.OPEN_EXISTING, 0, None)
  rc, data = win32file.ReadFile(handle, 1024)
  handle.Close() #此處也可使用win32file.CloseHandle(handle)來關閉句柄
  if data == test_data:
    print "Successfully wrote and read a file"
  else:
    raise Exception("Got different data back???")
  os.unlink(testName)
 
if __name__=='__main__':
  SimpleFileDemo()

可以看一看上面的例子是如何使用Windows API的,相信對于pywin32模塊的使用會有一個初步的認識。

有了pywin32模塊的輔助,對于Windows下的Python編程絕對是如虎添翼。

相關文章

  • Ubuntu 16.04 LTS中源碼安裝Python 3.6.0的方法教程

    Ubuntu 16.04 LTS中源碼安裝Python 3.6.0的方法教程

    最近Python 3發布了新版本Python 3.6.0,好像又加入了不少黑魔法!由于暫時不能使用 apt-get 的方式安裝 Python 3.6,所以還是直接編譯源碼安裝吧。下面這篇文章就介紹了在Ubuntu 16.04 LTS中源碼安裝Python 3.6.0的方法教程,需要的朋友可以參考下。
    2016-12-12
  • Python3利用print輸出帶顏色的彩色字體示例代碼

    Python3利用print輸出帶顏色的彩色字體示例代碼

    用Python寫命令行程序的時候,單一的輸出顏色太單調了,所以下面這篇文章主要給大家介紹了關于Python3利用print輸出帶顏色的彩色字體的相關資料,需要的朋友可以參考下
    2019-04-04
  • python中logging模塊的一些簡單用法的使用

    python中logging模塊的一些簡單用法的使用

    這篇文章主要介紹了python中logging模塊的一些簡單用法的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • Python安裝lz4-0.10.1遇到的坑

    Python安裝lz4-0.10.1遇到的坑

    本篇文章給大家分享了Python安裝lz4-0.10.1的詳細過程以及遇到的坑,需要的讀者們參考下。
    2018-05-05
  • 3行Python代碼實現圖像照片摳圖和換底色的方法

    3行Python代碼實現圖像照片摳圖和換底色的方法

    這篇文章主要介紹了3行Python代碼實現圖像照片摳圖和換底色的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 使用Python實現圖像標記點的坐標輸出功能

    使用Python實現圖像標記點的坐標輸出功能

    這篇文章主要介紹了使用Python實現圖像標記點的坐標輸出功能,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-08-08
  • Windows中安裝使用Virtualenv來創建獨立Python環境

    Windows中安裝使用Virtualenv來創建獨立Python環境

    有時我們的程序中需要調用不同版本的Python包和模塊,那么借助Virtualenv的虛擬環境就可以幫助我們隔離使用,接下來我們就來看一下在Windows中安裝使用Virtualenv來創建獨立Python環境的方法
    2016-05-05
  • django框架用戶權限中的session緩存到redis中的方法

    django框架用戶權限中的session緩存到redis中的方法

    今天小編就為大家分享一篇django框架用戶權限中的session緩存到redis中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 分享Python切分字符串的一個不錯方法

    分享Python切分字符串的一個不錯方法

    今天小編就為大家分享一篇Python切分字符串的一個不錯方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python爬蟲之UserAgent的使用實例

    Python爬蟲之UserAgent的使用實例

    今天小編就為大家分享一篇關于Python爬蟲之UserAgent的使用實例,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評論

润升娱乐