python模块之pywin32使用文档,python操作windowsAPI

@[TOC]

一、pywin32简介

1、windowsAPI是什么

Windows API(Application Programming Interface)是一组函数、数据结构、指令集等的集合,用于操作和控制Windows操作系统的各种功能和特性。它提供了一种通过编程方式与Windows进行交互的接口。

Windows API允许开发人员使用编程语言(如C/C++、Python等)调用和使用Windows操作系统的内部功能,如创建和管理进程、访问和修改文件系统、读取和写入注册表、绘制图形、操作窗口和控件、网络通信等。通过Windows API,开发人员可以利用操作系统提供的功能和资源,构建各种类型的应用程序。

Windows API以动态链接库(DLL)的形式提供,开发人员可以通过引入相应的库文件并使用库中的函数和数据结构,来实现对特定功能的调用和操作。使用Windows API可以完成从底层系统操作到高级应用程序开发的各个层次的任务。

Windows API是使用非常广泛的API之一,广泛应用于Windows软件开发、系统编程、驱动程序开发等领域。

win32API参考手册:www.yfvb.com/help/win32s...

微软win32API手册:learn.microsoft.com/zh-cn/windo...

2、pywin32模块

pywin32是一个Python扩展模块,它提供了与Windows操作系统的API进行交互的功能。具体而言,pywin32模块可以用于在Python中调用和操作Windows的各种系统功能,包括但不限于以下功能:

  1. 与Windows API的交互:pywin32提供了对Windows的API函数的封装,使得在Python中可以直接调用这些API函数进行操作,如创建和管理进程、访问和修改注册表、操作文件和文件夹等。
  2. COM组件和ActiveX对象的操作:pywin32支持使用COM技术(Component Object Model)与Windows操作系统中的COM组件进行交互。通过pywin32,可以创建、操纵和使用COM组件、ActiveX对象和OLE对象,实现与Windows应用程序和组件的集成。
  3. Windows服务的管理:pywin32提供了管理Windows服务的功能,可以通过pywin32创建和管理Windows服务,包括安装、启动、停止和删除Windows服务。
  4. GUI编程:pywin32模块还提供了与Windows的图形用户界面(GUI)进行交互的功能。它可以创建和操作Windows窗口、对话框,以及访问和修改窗口控件的属性和事件。

总之,pywin32模块提供了丰富的功能和方法,可以在Python中直接调用Windows操作系统的API,实现与Windows相关的操作和功能。

该项目是开源的,地址为:github.com/mhammond/py...

api地址为:timgolden.me.uk/pywin32-doc...

3、安装pywin32

bash 复制代码
# 直接安装
pip install pywin32

安装完成之后,在python安装目录下:\Lib\site-packages,会有一个PyWin32.chm文件,就是使用文档。

pywin32把Windows API按照功能分了一些大类,每一个大类作为一个模块。以下是所有的模块:

_winxptheme:提供专为xp系统的主题API mmapfile:编译的扩展模块,提供对内存映射文件API的访问 odbc:odb数据库api perfmon:包装性能监视器功能的模块。 pywintypes:支持常见 Windows 类型的模块。 servicemanager:与 Windows 服务控制管理器交互的模块。 timer:包装 Win32 Timer 函数的扩展 win2kras:将 Windows 2000 扩展封装到远程访问服务 (RAS) API 的模块。 win32api:提供了常用的用户API win32clipboard:提供了有关粘贴板的API win32con:有关的常量 win32console:控制台 win32cred:凭证管理功能的接口。此模块中的功能仅适用于 Windows XP 及更高版本。 win32crypt:win32 Cryptography API 的接口 win32event:提供了win32事件/等待API win32evtlog:封装了 Windows Win32 事件日志 API。 win32file:提供了有关文件操作的API win32gui:提供了有关windows用户界面图形操作的API win32help:Win32 help API's win32inet:Windows internet (wininet) API的接口 win32job:win32进程和线程API的接口,可在Windows 2000及更高版本中使用。 win32lz:封装 Windows LZ 压缩例程的模块 win32net:Windows internet (wininet) API的接口 win32pdh:封装了Windows性能数据助手API win32pipe:管道api win32print:封装Windows打印API win32process:进程api win32profile:包装用于处理用户配置文件的函数 win32ras:封装Windows远程访问服务(RAS) API win32security:win32安全API的接口 win32service:服务 win32trace win32transaction:用于事务化的NTFS和事务化的注册表函数 win32ts:这个模块中的所有函数都接受关键字参数 win32wnet:公开Windows网络API winxpgui:xp图像用户界面API

二、常用模块:pywintypes

0、使用

使用前需要引入:

py 复制代码
import pywintypes

1、CreateGuid:生成唯一标识符

返回一个字符串,格式为{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

py 复制代码
PyIID = pywintypes.CreateGuid()
print(PyIID) # {BB02ECB7-BC18-4336-A65C-C9C0CE548020}

三、常用模块:win32api

0、使用

使用前需要引入:

py 复制代码
import win32api

1、AbortSystemShutdown:关机

py 复制代码
import win32api

# 取消系统关闭操作
win32api.AbortSystemShutdown(computer_name=None)

该方法的参数computer_name是可选的,用于指定要取消系统关闭操作的计算机名称。如果未提供computer_name参数,则默认为本地计算机。

注意:该方法要求以管理员权限运行,否则会抛出权限错误。

2、Beep:发出声音

py 复制代码
import win32api

# 发出一次短促的蜂鸣声
win32api.Beep(freq, duration)

该方法接受两个参数: freq:表示发声的频率,以赫兹(Hz)为单位。常见的频率可以尝试使用440(标准音A)。 duration:表示发声持续的时间,以毫秒(ms)为单位。 请注意,该方法可能不适用于所有的计算机和操作系统。在某些系统中可能无法产生蜂鸣声音。

3、ClipCursor:限制鼠标范围

pywin32模块中,win32api.ClipCursor方法用于限制鼠标光标的移动范围在指定的矩形区域内。

py 复制代码
import win32api
# 定义矩形的左上角和右下角坐标
left, top, right, bottom = 100, 100, 500, 500

# 创建矩形对象
rect = (left, top, right, bottom)

# 限制鼠标光标的移动范围
win32api.ClipCursor(rect)

# 取消限制,恢复正常的鼠标光标移动范围
win32api.ClipCursor(None)

在这个示例中,首先我们定义了一个矩形区域的左上角和右下角坐标。然后,使用win32api.ClipCursor方法将鼠标光标的移动范围限制在该矩形区域内,传入矩形的坐标参数。最后,使用win32api.ClipCursor(None)取消对鼠标光标移动范围的限制,恢复正常的移动范围。

注意:在使用win32api.ClipCursor方法之后,记得一定要及时取消限制,以免造成鼠标无法移动的情况。

4、CloseHandle:关闭文件句柄

pywin32模块中,win32api.CloseHandle方法用于关闭一个句柄(handle)。

py 复制代码
import win32api
# 打开或创建一个文件,并获取文件的句柄
handle = win32api.CreateFile("path/to/file", win32api.GENERIC_READ, 0, None, win32api.OPEN_EXISTING, 0, None)

# 使用句柄进行一些操作

# 关闭句柄
win32api.CloseHandle(handle)

在这个示例中,首先我们使用win32api.CreateFile方法打开或创建一个文件,并获取文件的句柄。然后,使用这个句柄进行一些操作。最后,使用win32api.CloseHandle方法关闭句柄,确保资源的释放和内存的回收。

请注意,在使用完句柄后,务必记得及时关闭句柄,以免资源泄露或其他不可预见的问题。

5、CopyFile:复制文件

py 复制代码
import win32api
# 源文件路径
src_file = "path/to/source/file"

# 目标文件路径
dst_file = "path/to/destination/file"

# 复制文件
win32api.CopyFile(src_file, dst_file)

CopyFile支持多传一个int类型参数:指示如果文件存在,操作是否应该失败,默认为0。

6、DeleteFile:删除文件

py 复制代码
win32api.DeleteFile(fileName)

7、ExitWindows:注销当前用户

pywin32模块中,win32api.ExitWindows方法用于执行系统的关机、重启、注销或关闭等操作。

py 复制代码
import win32api
# 执行关机操作(将在 30 秒后关机)
win32api.ExitWindowsEx(win32api.EWX_SHUTDOWN | win32api.EWX_FORCE, 30)

在这个示例中,我们使用win32api.ExitWindowsEx方法执行关机操作。win32api.EWX_SHUTDOWN指定了要执行的操作为关机操作,win32api.EWX_FORCE指定了强制执行关机操作。最后的参数 30 表示延迟关机的时间,单位为秒(默认为 0)。

除了关机操作,还可以使用其他参数来执行其他操作,如重启、注销、锁定等。以下是一些常用的系统操作参数:

win32api.EWX_LOGOFF:注销 win32api.EWX_REBOOT:重启 win32api.EWX_SHUTDOWN:关机 win32api.EWX_POWEROFF:关闭电源(需要特权) 可以根据需要选择适合的操作参数。请注意,某些操作可能需要管理员权限才能执行成功。

另外,也可以使用win32api.InitiateSystemShutdown方法进行关机操作,它提供更多的自定义选项。

8、GetComputerName:获取计算机名

py 复制代码
import win32api
# 获取计算机名称
computer_name = win32api.GetComputerName()

print(f"Computer Name: {computer_name}")

9、GetCursorPos:返回鼠标位置

py 复制代码
import win32api
a, b = win32api.GetCursorPos()

print(a)
print(b)

10、GetLocalTime:获取当前时间

py 复制代码
# 结果:(2023, 11, 3, 15, 10, 12, 23, 214)
win32api.GetLocalTime()
win32api.GetSystemTime()

11、MessageBeep:发出预定义的声音

py 复制代码
win32api.MessageBeep(1)

12、TerminateProcess:终止进程

py 复制代码
import win32api
import win32con

# 根据进程ID终止进程
def kill_process_by_pid(pid):
    # 打开进程句柄
    handle = win32api.OpenProcess(win32con.PROCESS_TERMINATE, False, pid)
    if handle:
        # 终止进程
        win32api.TerminateProcess(handle, 0)
        # 关闭进程句柄
        win32api.CloseHandle(handle)

# 根据进程名称终止进程
def kill_process_by_name(name):
    import psutil
    for process in psutil.process_iter(['name', 'pid']):
        if process.info['name'] == name:
            pid = process.info['pid']
            kill_process_by_pid(pid)

# 终止名为"program_name.exe"的进程
kill_process_by_name("program_name.exe")

在上面的代码中,我们定义了两个函数:kill_process_by_pid()和kill_process_by_name()。kill_process_by_pid()函数使用进程ID(pid)来终止进程,而kill_process_by_name()函数使用进程名称来终止进程。在kill_process_by_name()函数中,我们使用了psutil模块来获取正在运行的进程列表,并根据进程名称匹配要终止的进程。

请注意,在使用win32api.TerminateProcess()函数时,要谨慎操作,因为它可以立即终止进程,而不进行任何清理工作。

13、其他

还有各种内存、文件、鼠标、键盘等操作的。

四、剪切板模块:win32clipboard

win32clipboard 模块提供了对 Windows 系统剪贴板的访问。

以下是 win32clipboard 模块的常用方法和属性:

OpenClipboard(hwnd):打开剪贴板。hwnd 是一个可选参数,用于指定当前活动窗口的句柄。 CloseClipboard():关闭剪贴板。 EmptyClipboard():清空剪贴板。 GetClipboardData(format):获取剪贴板中的数据。format 是一个可选参数,用于指定数据的格式。常见的格式有: win32con.CF_TEXT:文本格式 win32con.CF_UNICODETEXT:Unicode 文本格式 win32con.CF_DIB:位图格式 SetClipboardData(format, data):设置剪贴板中的数据。format 是数据的格式,data 是要设置的数据。 IsClipboardFormatAvailable(format):检查指定格式的数据是否在剪贴板中可用。

py 复制代码
import win32clipboard
import win32con

# 打开剪贴板
win32clipboard.OpenClipboard()

# 清空剪贴板
win32clipboard.EmptyClipboard()

# 设置文本数据
win32clipboard.SetClipboardData(win32con.CF_TEXT, b"Hello, World!")

# 获取文本数据
data = win32clipboard.GetClipboardData(win32con.CF_TEXT)
print(data)

# 检查指定格式的数据是否可用
is_available = win32clipboard.IsClipboardFormatAvailable(win32con.CF_UNICODETEXT)
print(is_available)

# 关闭剪贴板
win32clipboard.CloseClipboard()

上述代码打开剪贴板,清空剪贴板,设置文本数据,获取文本数据,并检查指定格式的数据是否可用,最后关闭剪贴板。

五、文件模块:win32file

win32file模块是pywin32模块中的一个子模块,用于处理Windows文件和文件系统的相关操作。

win32file模块提供了一些方法和常量来处理文件的读写、文件属性的获取和设置、文件系统的操作等。以下是这个模块的一些常用方法和功能的详细说明:

CreateFile(filename, access, share_mode, security_attributes, creation_disposition, flags_and_attributes, template_file):创建或打开一个文件,并返回一个文件句柄。 CloseHandle(handle):关闭一个文件句柄。 ReadFile(handle, buffer, overlapped):从文件中读取数据,并将结果存入指定的缓冲区。 WriteFile(handle, buffer, overlapped):将数据写入文件。 GetFileSize(handle):获取指定文件的大小。 SetFileAttributes(filename, file_attributes):设置文件的属性,比如只读、隐藏等。 GetFileAttributes(filename):获取文件的属性。 DeleteFile(filename):删除指定的文件。 GetFileInformationByHandle(handle):通过文件句柄获取文件的信息,如文件大小、创建时间等。 FindFirstFile(filename):查找指定文件/文件夹,并返回一个用于遍历结果的搜索句柄。 FindNextFile(handle):通过搜索句柄获取下一个文件/文件夹的信息。 FindClose(handle):关闭搜索句柄。 这些方法提供了对文件和文件系统进行操作的功能。可以使用这些方法来创建、打开、读写文件,获取和设置文件属性,删除文件,遍历文件夹等等。在使用这些方法之前,需要先安装pywin32模块,并导入win32file模块。

下面是一个示例代码,演示了如何使用win32file模块读取文件的内容和获取文件的大小:

py 复制代码
# 我们使用CreateFile方法打开指定的文件,然后使用GetFileSize方法获取文件的大小。接着,我们调用ReadFile方法读取文件的内容,并将结果返回。最后,我们使用CloseHandle方法关闭文件句柄。
#注意,在使用win32file模块时,需要有管理员权限或具有适当的权限来访问和操作文件。
import win32file

def read_file(filename):
    try:
        # 打开文件
        handle = win32file.CreateFile(filename, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, 0, 0)

        # 获取文件大小
        file_size = win32file.GetFileSize(handle)

        # 读取文件内容
        buffer = win32file.ReadFile(handle, file_size)

        # 关闭文件句柄
        win32file.CloseHandle(handle)

        return buffer
    except Exception as e:
        print("Error:", e)

# 读取文件内容
filename = "test.txt"
file_content = read_file(filename)
print(file_content)

六、ui模块:win32gui

1、常用方法

win32gui模块定义了windows窗口的常用方法:

py 复制代码
import win32gui
# 获取窗口句柄
hwnd = win32gui.FindWindow(None, "窗口标题")
print(hwnd)
py 复制代码
# 获取窗口位置和大小:
import win32gui
hwnd = win32gui.FindWindow(None, "窗口标题")
rect = win32gui.GetWindowRect(hwnd)
left, top, right, bottom = rect
print("窗口位置:(左:{}, 上:{})".format(left, top))
print("窗口大小:(宽:{}, 高:{})".format(right - left, bottom - top))
py 复制代码
# 获取窗口的父窗口和子窗口:
import win32gui
hwnd = win32gui.FindWindow(None, "窗口标题")
parent_hwnd = win32gui.GetParent(hwnd)
child_hwnds = []
win32gui.EnumChildWindows(hwnd, lambda hwnd, param: param.append(hwnd), child_hwnds)
print("父窗口句柄:", parent_hwnd)
print("子窗口句柄:", child_hwnds)
py 复制代码
# 设置窗口标题:
import win32gui
hwnd = win32gui.FindWindow(None, "窗口标题")
win32gui.SetWindowText(hwnd, "新的窗口标题")

2、获取窗口并设为活跃窗口

py 复制代码
import win32gui
window_name = "窗口标题"

# 通过窗口名称获取窗口句柄
hwnd = win32gui.FindWindow(None, window_name)

if hwnd != 0:
    # 将窗口设为活跃窗口
    win32gui.SetForegroundWindow(hwnd)
    print("窗口已设为活跃")
else:
    print("未找到该窗口")

该代码只会将窗口设为活跃,并不会将其移动到前台。如果窗口已最小化或位于其他桌面,它可能不会立即显示在屏幕上。

相关推荐
学c真好玩3 分钟前
Django创建的应用目录详细解释以及如何操作数据库自动创建表
后端·python·django
Asthenia04123 分钟前
GenericObjectPool——重用你的对象
后端
Piper蛋窝13 分钟前
Go 1.18 相比 Go 1.17 有哪些值得注意的改动?
后端
excel27 分钟前
招幕技术人员
前端·javascript·后端
盖世英雄酱5813644 分钟前
什么是MCP
后端·程序员
小鸡脚来咯2 小时前
SpringBoot 常用注解通俗解释
java·spring boot·后端
豌豆花下猫2 小时前
Python 3.14 t-string 要来了,它与 f-string 有何不同?
后端·python·ai
小奏技术2 小时前
Spring7将正式弃用Junit 4,我们也是时候迁移到Junit5了
后端
吴佳浩3 小时前
Python入门指南(四)-项目初始化
人工智能·后端·python