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 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作为开始吧:


1

2

3

import win32api

import win32con

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

效果如下:

在Lib\site-packages\win32\Demos目录下有许多例子,如果你还不清楚pywin32怎么上手,来看看这些例子就知道了。

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


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

# 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编程绝对是如虎添翼。

原文地址:https://www.cnblogs.com/stvadv/p/12311972.html

时间: 2024-08-30 01:40:16

Windows平台Python编程必会模块之pywin32的相关文章

使用py2exe发布windows平台Python

一.简介 py2exe是一个将python脚本转换成windows上的可独立执行的可执行程序(*.exe)的工具,这样,你就可以不用装python而在windows系统上运行这个可执行程序.py2exe已经被用于创建wxPython,Tkinter,Pmw,PyGTK,pygame,win32com client和server,和其它的独立程序.py2exe是发布在开源许可证下的. 二.安装py2exe 从http://prdownloads.sourceforge.net/py2exe下载并运

windows平台python 2.7环境编译安装zbar

最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图片扫描,支持多平台,例如 iPhone,Andriod 手机,同时 ZBar封装了二维码扫描的 API 开发包. ZBar 目前条码类型有:EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 and QR Code. 从

学习Python编程必会的开发工具,这些你都会用吗?

Python软件基金会阐明了开发人员如何在Python的三个主要使用领域使用Python:数据科学.web开发和DevOps. 就流行程度而言,Python可能是世界上发展最快的编程语言[1],但是开发人员在使用它做什么,使用什么工具呢? Python软件基金会阐明了开发人员如何在Python的三个主要应用领域使用Python:数据科学.web开发和DevOps. 去年秋天,基金会和IDE软件公司JetBrains为2018年度Python开发者调查报告[2]对150个国家的2万多名专业和业余开

Python全栈自动化系列之Python编程基础(模块和包)

一.模块 1)定义 模块:模块是一个Python文件,以.py结尾,包含了Python对象定义和Python函数包:Python中的包就是一个包含一个__init__.py文件的目录(文件夹) 2)模块的作用 a.模块让你能够有逻辑地组织你的Python代码段 b.把相关功能的代码写到一个模块里面能让你的代码更好用,更易懂 c.模块能定义函数.类和变量,模块里也能包含可执行的代码 注意点: ①在进行模块导入的时候,会将导入的模块从上往下执行一遍 ②模块导入时,同级目录导入,Pycharm有可能识

windows平台python 2.7环境编译安装zbarlight

类似于前一篇博文,http://www.cnblogs.com/zhongtang/p/7148082.html中描述的情况. 编译zbarlight同样出现问题,简要处理步骤如下: 1.到https://pypi.python.org/pypi/zbarlight下载源文件. File Type Py Version Uploaded on Size zbarlight-1.2.tar.gz (md5) Source   2017-03-09 5KB 2.解压到桌面目录,C:\Users\zo

Windows下Python添加库(模块)路径

动态的添加库路径.在程序运行过程中修改sys.path的值,添加自己的库路径 import syssys.path.append(r'your_path') 在Python安装目录下的\Lib\site-packages文件夹中建立一个.pth文件,内容为自己写的库路径.示例如下 E:\\work\\Python\\httpE:\\work\\Python\\logging

Windows配置Python编程环境

1.安装Python https://www.python.org/ 2.修改环境变量 将安装python的路径加到path路径 3.配置notepad++ a. notepad++/运行/“运行”按钮 b. 在弹出的窗口内输入以下命令: cmd /k python "$(FULL_CURRENT_PATH)" & ECHO. & PAUSE & EXIT 然后,点击保存. **命令解释 cmd /k python:表示打开cmd窗口,运行/k后边的命令,并且执

Windows平台 python 常用包的安装

1. yaml 从http://pyyaml.org/wiki/PyYAML下载对应版本的exe,直接安装就可以. 2. pip 从https://pypi.python.org/pypi/pip#downloads 下载对应版本的压缩包,解压缩. 在解压后路径下打开命令行,运行 python setup.py install 最后,将路径 C:\Python27\Scripts (根据自己的python安装路径)加入环境变量. 测试方法: 3. numpy,scipy,matplotlib等

windows 下Python import 导入自定义模块

周末在家研究这个东西,则找到解决方案. 费话少说,上代码 1 #定义一个自定义的函数,如下 2 #函数的名称必须是字母和数字的组合,不能用数字开头 3 #函数名后用小括号括住入参,可以用逗号分隔多个 4 #如果有返回值用return ,如果没有返回值,默认返回None 5 6 def PanDuanFenShu(score): 7 if 100 >= score >= 90: 8 print("A") 9 if 90 > score >= 80: 10 prin