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

2023-05-16

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

不过,python模块虽多,也不可能满足开发者的所有需求。而且,模块为了便于使用,通常都封装过度,有些功能无法灵活使用,必须直接调用Windows API来实现。

要完成这一目标,有两种办法,一种是使用C编写Python扩展模块,或者就是编写普通的DLL通过python的ctypes来调用,但是这样就部分牺牲掉了Python的快速开发、免编译特性。

还好,有一个模块pywin32可以解决这个问题,它直接包装了几乎所有的Windows API,可以方便地从Python直接调用,该模块另一大主要功能是通过Python进行COM编程。

该项目是开源的,项目地址是:GitHub - mhammond/pywin32: Python for Windows (pywin32) Extensions

安装时可以直接使用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, 0None, win32con.OPEN_EXISTING, 0None)

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • podman容器开机自启

    podman容器开机自启 管理员开机自启 拉取busybox镜像作测试 root 64 localhost podman pull busybox Resolved 34 busybox 34 as an alias etc contain
  • Hadoop基础操作--查询集群的存储系统信息

    通过HDFS监控服务可以查询到大量相关信息 xff0c HDFS的监控服务是通过节点 xff08 NameNode xff09 的端口50070来进行访问 例 xff1a 在浏览器地址栏输入 http master 50070 来展现当前H
  • MapReduce编程入门--用eclipse创建MapReduce工程

    这里我用的事eclipse对MapReduce进行编程 xff0c 首先需要下载相关的eclipse xff0c eclipse可以用于多种语言的开发 xff0c 这里我们需要用到的是Eclipse IDE for Java EE Deve
  • Mac使用VMware Fusion安装OpenWRT

    需要在Mac电脑上安装VMware Fusion xff0c 准备OpenWRT镜像 vmdk版本 xff08 img转vmdx方法可在我的csdn文章中找到 xff09 安装步骤 1 打开VMware Fusion点击左上角 43 打开
  • [网络工程师]-路由配置-BGP配置

    组建BGP网络是为了实现网络中不同AS之间的通信 配置BGP基本功能是组建BGP网络的最基本要求 xff0c 主要包括一下三部分 xff1a xff08 1 xff09 启动BGP进程 xff1a 只有先启动BGP进程 xff0c 才能开始
  • Linux--bash、fork、exec、进程替换相关命令

    目录 1 bash 2 fork 43 exec 例1 xff1a 3 fork 43 exec 例子2 1 bash linux bash是一个命令处理器 xff0c 通常运行于文本窗口中 xff0c 并能执行用户直接输入的命令 xff1
  • js,定时器,计时器

    let a 61 settimeout 61 gt console log 1 1000 1 xff0c 返回值是一个number标识 2 xff0c cleartimeout xff0c 和clearintenval都可以消除settim
  • commonjs模块和es6模块的区别

    es6模块在浏览器端和服务器端都可用 xff0c commonjs只适用于服务端 1 xff0c es6是编译时输出接口 xff08 接口在代码在解析阶段就已经生成 xff09 xff0c commonjs是运行时加载 xff0c 在脚本完
  • uboot的命令体系-2.8.uboot源码分析4-朱有鹏-专题视频课程

    uboot的命令体系 2 8 uboot源码分析4 3793人已学习 课程介绍 本课程为uboot学习的第8部分 xff0c 主要讲解uboot的命令体系 分析了uboot的命令定义和实现的方法 xff0c 教大家自己向uboot中添加自定
  • 浪潮服务器忘记管理口地址,远程配置raid,远程安装系统。

    如果浪潮服务器忘记了管理口地址 xff0c 可以通过设置临时IP地址进行服务器管理 xff08 必须保证服务器之前IPV4的获取方式为DHCP xff09 使用工具 xff1a tftpd32 xff08 网上可直接搜索下载 xff09 x
  • linux命令行——linux快速搜索历史命令

    一 需求描述 在执行命令时 xff0c 对于已经输入的历史命令 xff0c 可以通过关上下键进行翻找 xff0c 如果是最近几条 xff0c 很容易找到 xff0c 如果是很久之前的命令 xff0c 依旧使用上下键查找就会力不从心 二 解决
  • 如何用六步教会你使用python爬虫爬取数据

    前言 xff1a 用python的爬虫爬取数据真的很简单 xff0c 只要掌握这六步就好 xff0c 也不复杂 以前还以为爬虫很难 xff0c 结果一上手 xff0c 从初学到把东西爬下来 xff0c 一个小时都不到就解决了 python爬
  • react实现点击复制

    1 使用浏览器提供的document execCommand 39 copy 39 2 使用copy to clipboard库 document execCommand 34 copy 34 1 document execCommand封
  • zustand

    最近工作中需要用到zustand xff0c 先记录一下学到的demo 安装 xff1a npm install zustand 公共文件store引入 import create from 39 zustand 39 const useS
  • antd获取表单的所有数据

    当我们使用antd的组件的form 表单时 xff0c 数据一般在form中的onFinish 61 onFinish 方法上可以拿到 const Demo 61 61 gt const onFinish 61 values any 61
  • antd使用阿里巴巴矢量图标

    最近需要在antd引入中阿里矢量图标 xff0c 看到几个关于antd使用iconfont的回答 xff0c 其中关于Icon的引入 xff0c 都是写的从antd引入 xff08 不可用 xff09 旧版本 xff1a import Ic
  • antd表单赋值,回显表格数据

    使用 antd 做表格回显数据时 xff0c 会看到文档有写 xff1a 所以我们可以 1 定义hooks const form 61 Form useForm 2 在触发事件中使用 xff0c 以打开模态框赋值为例 const showM
  • react反向代理配置

    官网 xff1a https create react app dev docs proxying api requests in development 安装 npm install http proxy middleware save
  • js立即执行函数写法

    优点 xff1a 1 立即执行 xff0c 不用担心临时变量污染全局变量 xff0c 减少命名 2 方便封装 写法 xff1a function name params console log params 打印 1 1 function
  • uboot的环境变量-2.9.uboot源码分析5-朱有鹏-专题视频课程

    uboot的环境变量 2 9 uboot源码分析5 3347人已学习 课程介绍 本课程为uboot学习的第9部分 xff0c 主要讲解uboot的环境变量的实现原理和环境变量在内存中 SD卡中的存储方法 结合环境变量相关的几个命令的代码分析

随机推荐