Windows平台Python编程必会模块之pywin32介绍

  

在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安装pywin32”来安装它。

  

安装完毕后,在Python安装路径下的Lib \网站\ win32可以看到所有的API支撑模块,Lib \网站\ win32com下则是COM的支撑模块。

  

癢indows平台Python编程必会模块之pywin32介绍"

  

在Lib \网站下有一个PyWin32.CHM帮助文件,相信对Windows编程有一定基础的,看了这个帮助文件就能很快上手。

  

简单说,pywin32把Windows API按照功能分了一些大类,每一个大类作为一个模块。以下是所有的模块:

  
  

mmapfile odbc的perfmon servicemanager计时器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)。

  

部分模块之间还存在一些交叉,比如它仅仅的参数中用到的GENERIC_READ常量,在win32con中有定义,在win32file中也有定义。

  

用户只要大概知道这个是文件API用到的常量,那么不管你写win32file.GENERIC_READ还是win32con.GENERIC_READ都是可以的。

  

关闭句柄用的CloseHandle函数也是在两个模块中都有定义的。

  

需要注意的是,微软提供的Wsa系列网络API也都在win32file模块中,因为很多操作系统都是把套接字也用为文件对象来操作的。

  

如果你不清楚要使用的API在哪个模块中,那就到帮助文件里搜索一下,一定会给你答案的。

  

癢indows平台Python编程必会模块之pywin32介绍"

  

如果你只是对pywin32中如何调用某个API不熟悉,那么查看Pywin32.CHM就足够了,如果你对API本身的参数定义和使用不熟悉,那还得继续看MSDN。

  

下面来写一个Helloworld作为开始吧:

        进口win32api   进口win32con   win32api.MessageBox(没有“你好,pywin32 !”,“pywin32”, win32con.MB_OK)      

效果如下:

  

癢indows平台Python编程必会模块之pywin32介绍"

  

在Lib \网站\ win32 \演示目录下有许多例子,如果你还不清楚pywin32怎么上的手,来看看这些例子就知道了。

  

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

        #这是一个“演示”win32file——它曾经是比一个一个测试用例   #演示,所以被移动到测试目录。      #请提供你最喜欢的简单的演示。   进口win32file win32api win32con   进口操作系统      #一个非常简单的演示,请注意,这并没有超过你可以做   #内装式Python文件对象,所以这么简单的东西,你   #一般* *应该使用装入的Python对象。只使用win32file等   #当你需要win32 Python中的特定功能不可用。   def SimpleFileDemo ():   testName=os.path。加入(win32api.GetTempPath (),“win32file_demo_test_file”)   如果os.path.exists (testName): os.unlink (testName)   #打开文件编写。   处理=win32file.CreateFile (testName,   win32file.GENERIC_WRITE,   0,   没有,   win32con.CREATE_NEW,   0,   没有一个)   test_data=" https://www.yisu.com/zixun/Hello/0there " .encode (ascii)   win32file。test_data WriteFile(处理)   handle.Close ()   #打开阅读。   处理=win32file。它仅仅(testName win32file。GENERIC_READ 0, win32con。OPEN_EXISTING, 0,没有)   rc、数据=win32file。ReadFile(句柄,1024)   handle.Close() #此处也可使用win32file.CloseHandle(处理)来关闭句柄   如果数据==test_data:   打印“成功写入和读取文件”   其他:   提高异常(“有不同的数据回# 63;& # 63;& # 63;”)   os.unlink (testName)      if __name__==癬_main__”:   SimpleFileDemo ()

Windows平台Python编程必会模块之pywin32介绍