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

摘要:
在Windows平台上,从最初使用C/C++编写原生EXE程序,到使用Python编写一些常见的脚本程序,使用成熟的模块大大提高了编程效率。幸运的是,有一个模块pywin32可以解决这个问题。它直接打包了几乎所有的Windows API,可以直接从Python调用。该模块的另一个主要功能是通过Python进行COM编程。安装后,您可以在Python安装路径下的Libsitepackageswin22中看到所有API支持模块,在Libsitepackage swin2com中看到COM支持模块。简单地说,pywin32根据Windows API的功能将其划分为几个类别,每个类别都作为一个模块。

在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安装路径下的Libsite-packageswin32可以看到所有的API支撑模块,Libsite-packageswin32com下则是COM的支撑模块。

Windows平台Python编程必会模块之pywin32第1张

Libsite-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在哪个模块中,那就到帮助文件里搜索一下,一定会给你答案的。

Windows平台Python编程必会模块之pywin32第2张

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

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

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

 效果如下:

Windows平台Python编程必会模块之pywin32第3张

在Libsite-packageswin32Demos目录下有许多例子,如果你还不清楚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

免责声明:内容来源于网络,仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇DevExpress TreeList用法总结三种标准库链接方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python中的各个包的安装,用pip安装whl文件

在安装之前,一直比较迷惑究竟如何用,安装完后,发现竟然如此简单 首先我一般用的是python27,官网下载python27msi安装window7 64位后,已经自带了Pip 和 easy_install 但是却不晓得如何安装 whl目录, 经过搜索后发现,把pip和easy_install加入到环境变量中,这个应该不是难事,如下: 把Scripts这个...

Python机器学习(6)——逻辑回归分类

在本系列文章中提到过用Python机器学习(2)数据拟合与广义线性回归中提到过回归算法来进行数值预测。逻辑回归算法本质还是回归,只是其引入了逻辑函数来帮助其分类。实践发现,逻辑回归在文本分类领域表现的也很优秀。现在让我们来一探究竟。 1、逻辑函数 假设数据集有n个独立的特征,x1到xn为样本的n个特征。常规的回归算法的目标是拟合出一个多项式函数,使得预测...

用Python实现gmail邮箱服务,实现两个邮箱之间的绑定(中)

  这篇博客,主要讲解用Python实现邮箱服务的几个需要学习的模块:E-mail Compotion and Decoding(邮件生成和解析)、SMTP、POP、IMAP   如上篇博客所讲,我学习过程参考《Foundations of Python3 Network Programming. 2nd Edition》,代码部分借鉴了其中的例子,但绝对...

【Python学习笔记】之格式化输入输出

1. python3设置print输出不换行 函数原型 print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 对应参数含义如下 objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。 sep -- 用来间隔多个对象,默认值是一个空格。 end...

Python面向对象之继承

一、继承 面向对象的语言:c++,c#,java 面对对象的三大特性(继承、多态、封装) 其他语言都有 二、继承和抽象 实例---> 分类 ---> 汇总 逐渐抽象 编程实现:先抽象,后继承 继承的好处:继承能提高代码的重用性,还能规范代码 继承分为子类和父类 父类/超类/基类 子类/派生类 class Animal:...

Python自动化 【第十八篇】:JavaScript 正则表达式及Django初识

本节内容 JavaScript 正则表达式 Django初识 正则表达式 1、定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m 表示多行匹配 JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m模式也会使用^$来匹配换行的内容) 1 var pattern...