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


Posted in Python onOctober 01, 2019

在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的支撑模块。

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

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

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

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

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

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

效果如下:

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

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

Python 相关文章推荐
python实现每次处理一个字符的三种方法
Oct 09 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
栈和队列数据结构的基本概念及其相关的Python实现
Aug 24 Python
使用python socket分发大文件的实现方法
Jul 08 Python
Python-Flask:动态创建表的示例详解
Nov 22 Python
python列表推导式操作解析
Nov 26 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
Feb 20 Python
Tensorflow实现将标签变为one-hot形式
May 22 Python
python中常见错误及解决方法
Jun 21 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
Nov 15 Python
利用Python实现Picgo图床工具
Nov 23 Python
Python全栈之列表数据类型详解
Oct 01 #Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 #Python
使用Python制作一个打字训练小工具
Oct 01 #Python
Python + Flask 实现简单的验证码系统
Oct 01 #Python
python 矢量数据转栅格数据代码实例
Sep 30 #Python
python多进程间通信代码实例
Sep 30 #Python
Python实现二叉树的最小深度的两种方法
Sep 30 #Python
You might like
php获取ajax的headers方法与内容实例
2017/12/27 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
漂亮的widgets,支持换肤和后期开发新皮肤(2007-4-27已更新1.7alpha)
2007/04/27 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
2017/01/22 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
微信小程序 五星评价功能的实现
2017/03/09 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
微信小程序之事件交互操作实例分析
2018/12/03 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
python框架django项目部署相关知识详解
2019/11/04 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
Python图像处理库PIL中图像格式转换的实现
2020/02/26 Python
keras的backend 设置 tensorflow,theano操作
2020/06/30 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
美国领先的汽车轮胎和轮毂供应商:TireBuyer
2016/07/21 全球购物
Scholastic父母商店:儿童书籍
2017/01/01 全球购物
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
数据管理员的自我评价分享
2013/11/15 职场文书
学校三节实施方案
2014/06/09 职场文书
小学生运动会报道稿
2014/09/12 职场文书
销售员工作检讨书(推荐篇)
2014/10/18 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
公司员工手册范本
2015/05/14 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书