Python_Windows系统编程_深入浅出_上篇

Windows系统编程

Python是一门强大的脚本语言,它可以把其他语言编写的程序粘合在一起,可以很容易地调用外部程序,以及调用其他语言编写的动态链接库中的代码,甚至可以将Python程序打包为.exe可执行程序以便在没有安装Python的Windows系统中运行。

1. 注册表编程

对于Windows操作系统,注册表是非常重要的组成部分,Windows将几乎所有软/硬件系统配套信息都保存在注册表中。通过读取注册表中的数据,可以获取Windows平台的相应信息,比如,已安装的服务和程序列表,开机自动运行的程序列表、文件类型与程序的关联关系等;通过修改注册表中的数据,可以对Windows系统进行详细的配置。
Windows注册表有如下5个根键.

  • HKEY_LOCAL_MACHINE(HKLM)
  • HKEY_CURRENT_CONFIG(HKCC)
  • HKEY_CLASSES_ROOT(HKCR)
  • HKEY_USERS(HKU)
  • HKEY_CURRENT_USER(HKCU)
    在Windows shell中输入regedit可以打开注册表编辑器:
    在这里插入图片描述
    在注册表编辑器界面中可以对注册表的键和值进行增删改查等操作
    在注册表中,值可以为数值、字符串等多种类型,详细类型如下:
类型名 说明
REG_NONE 没有类型
REG_SZ 字符串类型
REG_EXPAND_SZ 一个可扩展的字符串值,其中可以包括环境变量
REG_BINARY 二进制类型
REG_DWORD/REG_DWORD_LITTLE_ENDIAN DWORD类型,用于存储32位无符号整数,以little-endian格式存储
REG_DWORD_BIG_ENDIAN DWORD类型,存储32位无符号整数,以big-endian格式存储
REG_LINK 到其他注册表键的链接,指定根键或到目标键的路径
REG_MULTI_SZ 一个多字符串值,指定一个非空字符串的排序列表
REG_RESOURCE_LIST 资源列表,用于枚举即插即用硬件及其配置
REG_FULL_RESOURCE_DESCRIPTOR 资源标识符,用于枚举即插即用硬件极其配置
REG_RESOURCE_REQUIREMENTS_LIST 资源需求列表,用于枚举即插即用硬件极其配置
REG_QWORD/REG_QWORD_LITTLE_ENDIAN QWORD类型,用于存储64位无符号整数,以littel-endian格式存储或未指定存储格式

对于注册表编程,可以使用win32api模块和win32con模块,其中win32api模块封装了Windows API 函数,提供了非常友好的接口。该模块中常用的注册表操作函数有8个。

  • RegOpenKey()/RegOpenKeyEx():打开注册表
  • RegCloseKey() :关闭注册表
  • RegQueryValue()/RegQueryValueEx():读取项值
  • RegCreateKey()/RegCreateKeyEx():添加项
  • RegDeleteKey():删除项
  • RegEnumKey():枚举子键
  • RegDeletetValue():删除值
例子,查询注册表并输出本机安装的IE浏览器软件版本信息:
import win32api
import win32con

key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Microsoft\\Internet Explorer', 0,
                          win32con.KEY_ALL_ACCESS)
print(win32api.RegQueryValue(key,''))
print(win32api.RegQueryValueEx(key,'Version'))
print(win32api.RegQueryInfoKey(key))
win32api.RegCloseKey(key)

(该程序需要在管理员权限下运行)结果:
在这里插入图片描述

检测随系统启动而启动的程序列表
from win32api import *
from win32con import *


def get_values(fullname):
    name = str.split(fullname, '\\', 1)
    try:
        if name[0] == 'HKEY_LOCAL_MACHINE':
            key = RegOpenKey(HKEY_LOCAL_MACHINE, name[1], 0, KEY_READ)
        elif name[0] == 'HKEY_CURRENT_USER':
            key = RegOpenKey(HKEY_CURRENT_USER, name[1], 0, KEY_READ)
        elif name[0] == 'HKEY_CLASSES_ROOT':
            key = RegOpenKey(HKEY_CLASSES_ROOT, name[1], 0, KEY_READ)
        elif name[0] == 'HKEY_CURRENT_CONFIG':
            key = RegOpenKey(HKEY_CURRENT_CONFIG, name[1], 0, KEY_READ)
        elif name[0] == 'HKEY_USERS':
            key = RegOpenKey(HKEY_USERS
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值