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

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

在Windows平台上,从使用C/C编写原生EXE程序,到使用Python编写一些常见的脚本程序,成熟模块的使用大大提高了编程效率。

在Windows平台上,从用C/C编写原生EXE程序,到用Python编写一些常见的脚本程序,成熟模块的使用大大提高了编程效率。

但是,python模块虽多,也不可能满足开发者的所有需求。而且为了好用,模块通常会过度包装,有些功能不能灵活使用,必须直接调用Windows API实现。

要达到这个目的,有两种方法,一种是用C编写python扩展模块,另一种是通过Python的ctypes编写普通DLL来调用,但这部分牺牲了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支持模块。

有一个PyWin32。Lib\site-packages下的CHM帮助文件。相信对Windows编程有一定基础。看完这个帮助文件可以快速上手。

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

mmapfile odbc perfmon service manager timer win 2k ras win 32 API win 32 clip board win 32 console

win 32 cred win 32 crypt win 32 event win 32 evt log win 32 file win 32 GUI win 32 help win 32 net win 32 job

win 32 LZ win 32 net win 32 PDH win 32 pipe win 32 print win 32 process win 32 profile win 32 as win 32 security

win32 service win32 trace win32 transaction win32 ts win32 wnet win XP GUI

例如,文件API在模块win32file中,进程API在模块win32process中。

使用时,根据需要导入相关模块就够了,win32con定义了所有常量,几乎是必不可少的,一些难以分类的api在模块win32api中(大部分是kernel32.dll导出的)。

模块之间有一些交集,比如CreateFile的参数中使用的GENERIC_READ常量,它是在win32con和win32file中定义的。

只要用户大概知道这是一个文件API使用的常量,你是否写win32file都是可以的。GENERIC_READ或win32con。通用_读取

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

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

如果你不知道你要用的API在哪个模块里,只要搜索一下帮助文件就一定能得到答案。

如果您只是不熟悉如何在pywin32中调用API,那么检查Pywin32就足够了。如果你不熟悉参数定义和API本身的使用,你必须继续阅读MSDN。

让我们先写一个Helloworld:

导入win32api

导入win32con

win32api。MessageBox(无,“你好,pywin32!”,' pywin32 ',win32con。MB_OK)

效果如下:

在Lib\site-packages\win32\Demos目录中有很多例子。如果你仍然不知道如何开始使用pywin32,看看这些例子。

例如,使用API进行文件操作:

#这是win32file的“演示”——它过去更多的是一个测试用例,而不是

# demo,所以被移到了测试目录下。

#请贡献您最喜欢的简单小演示。

导入win32file、win32api、win32con

导入操作系统

#一个非常简单的演示——请注意,这并不比您使用

#内置Python文件对象,所以对于这样简单的事情,您

#一般*应该*使用内置Python对象。仅使用win32文件等

#当您需要Python中没有的win32特定功能时。

def SimpleFileDemo():

testName=os.path.join( win32api .GetTempPath(),' win32file_demo_test_file ')

如果OS。路径。exists(testName):OS。取消链接(测试名称)

#打开文件进行写入。

handle=win32file .创建文件(测试名,

win32file文件.通用_写入

0,

没有,

win32con .创建_新建,

0,

无)

test_data='Hello\0there ' .编码(“ascii”)

win32file文件.写文件(句柄,测试数据)

处理。关闭()

#打开它阅读。

handle=win32file .CreateFile(testName,win32file .GENERIC_READ,0,None,win32con .OPEN_EXISTING,0无)

rc,data=win32file .ReadFile(句柄,1024)

处理。关闭()#此处也可使用win32file文件.CloseHandle(手柄)来关闭句柄

如果数据==测试数据:

打印"成功写入和读取文件"

否则:

引发异常('返回不同的数据?')

os.unlink(测试名)

if __name__=='__main__ ':

简单文件演示()

可以看一看上面的例子是如何使用Windows API的,相信对于pywin32模块的使用会有一个初步的认识。

有了pywin32模块的辅助,对于Windows操作系统操作系统下的计算机编程语言编程绝对是如虎添翼。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: