目录
pywin32库可对Windows API进行访问和进行一些高级操作。
win32api模块
win32api:对Windows API函数直接访问。
win32con:定义了各种Windows常量,用于与其他模块一起使用。
警告提示对框
通常可以通过弹出一个提示窗口,通过获取用户选择得到返回值后做其他操作,
函数 win32api.MessageBox(hwnd, text, title, type)参数:
hwnd: 父窗口的句柄。如果为0或None,则消息框没有父窗口。
text: 消息框中显示的文本内容。
title: 消息框的标题。
type: 指定消息框的类型和按钮组合。可以是以下常量或常量的组合:
- MB_OK---显示“确定”按钮。
- MB_OKCANCEL---显示“确定”和“取消”按钮。
- MB_YESNO---显示“是”和“否”按钮。
- MB_YESNOCANCEL---显示“是”、“否”和“取消”按钮。
- MB_ICONQUESTION---显示问号图标。
- MB_ICONINFORMATION---显示信息图标。
- MB_ICONWARNING---显示警告图标。
- MB_ICONASTERISK---含图标、固定按钮 提示信息框。
- win32con.MB_ICONERROR---显示错误图标。
- MB_HELP---不含图标、可改变按钮 说明信息框。
- MB_RETRYCANCEL---不含图标,重试信息框。
- MB_ICONSTOP---显示X号图标。
type为常量整数,所以可以直接使用数字:
- 0: 确定
- 1: 确定,取消
- 2: 终止,重试,忽略
- 3: 是,否,取消
- 4: 是,否
- 5: 重试,取消
- 6: 取消,再试一次,继续
函数返回值:
- 1: 确定
- 2: 取消
- 3: 终止
- 4: 重试
- 5: 忽略
- 6: 是
- 7: 否
- 10:再试一次
- 11:继续
import win32api, win32gui
from win32con import *
mes = win32api.MessageBox(None, "这是一个测试对话窗口", "警告", MB_RETRYCANCEL)
print(mes) # 打印结果为4
可以使用组合按钮,如下,
mes = win32api.MessageBox(None, "测试1", "test", MB_YESNO | MB_ICONQUESTION)
print(mes)
# win32con.IDOK: 用户点击了“确定”按钮。
# win32con.IDCANCEL: 用户点击了“取消”按钮。
# win32con.IDYES: 用户点击了“是”按钮。
# win32con.IDNO: 用户点击了“否”按钮。
mes = win32api.MessageBox(None, "测试2", "test", IDOK | IDCANCEL)
print(mes)
删除和复制文件
win32api.DeleteFile(r'E:\桌面\99\测试图片\1.jpg') # 删除文件
win32api.CopyFile(r'E:\桌面\测试文件\23.png', r'E:\桌面\测试文件\123.png') # 复制文件,参数分别是源文件和目标文件
获取时间
print(win32api.GetLocalTime()) # 计算机时间(2024, 4, 1, 15, 13, 37, 26, 781)
print(win32api.GetSystemTime()) # 格林尼治时间(2024, 4, 1, 15, 5, 37, 26, 781)
系统警告提示音
MessageBeep()
函数用于使计算机发出声音,通常用于向用户发出警告或通知。
win32api.MessageBeep(type=MB_ICONQUESTION)
type
参数可以设置为以下几种预定义的值,这些值决定了播放哪种声音:
win32con.MB_OK
:系统默认声音,通常是一个短促的“嘟”声。win32con.MB_ICONASTERISK
:一个连续的“嘟”声,直到下一个MessageBeep()
调用。win32con.MB_ICONEXCLAMATION
:一个长“嘟”声。win32con.MB_ICONHAND
:一个双“嘟”声。win32con.MB_ICONQUESTION
:一个“嘟-嘟”声(两个短促的声音)。
自定义声音播放
Beep()
用于通过计算机的主板扬声器(或声卡模拟)发出指定频率和时长的蜂鸣声。与 MessageBeep()
(播放系统预定义声音)不同,Beep()
允许自定义声音的频率和持续时间。
win32api.Beep(frequency, duration)
参数名 | 类型 | 描述 |
---|---|---|
frequency | int | 声音的频率(单位:赫兹,Hz)。有效范围:37 Hz 到 32767 Hz。262 Hz (中音C)、440 Hz (标准音A)、1000 Hz (高频提示音) |
duration | int | 声音的持续时间(单位:毫秒,ms)。有效范围:正整数(如 500=0.5秒)。 |
演示一段音符,
# 定义音符频率和时长(毫秒)
melody = [
(262, 300), # C4
(294, 300), # D4
(330, 300), # E4
(349, 300), # F4
(392, 600), # G4
]
for freq, dur in melody:
win32api.Beep(freq, dur)
time.sleep(0.05) # 音符间短暂间隔
检索系统级度量信息
GetSystemMetrics()
可以返回多种与系统相关的度量值,比如屏幕尺寸、工作区尺寸、系统字体大小等。
win32api.GetSystemMetrics()
函数的一些常用参数及其含义:
0
:返回屏幕宽度(像素)。1
:返回屏幕高度(像素)。SM_CXSCREEN
(等同于0
):屏幕宽度(像素)。SM_CYSCREEN
(等同于1
):屏幕高度(像素)。SM_CXWORK
:工作区的宽度(像素),即屏幕宽度减去系统任务栏等区域的宽度。SM_CYWORK
:工作区的高度(像素),即屏幕高度减去系统任务栏等区域的高度。SM_CXFULLSCREEN
:全屏窗口的宽度(像素)。对于多显示器设置,这通常是主显示器的宽度。SM_CYFULLSCREEN
:全屏窗口的高度(像素)。SM_CXFIXEDFRAME
:窗口边框的宽度(像素)。SM_CYFIXEDFRAME
:窗口边框的高度(像素)。SM_CXSIZEFRAME
:窗口可调边框的宽度(像素)。SM_CYSIZEFRAME
:窗口可调边框的高度(像素)。SM_CXFRAME
:等同于SM_CXSIZEFRAME
。SM_CYFRAME
:等同于SM_CYSIZEFRAME
。SM_CXMIN
:窗口的最小宽度(像素)。SM_CYMIN
:窗口的最小高度(像素)。SM_CXVSCROLL
:垂直滚动条的宽度(像素)。SM_CYHSCROLL
:水平滚动条的高度(像素)。SM_CYCAPTION
:标题栏的高度(像素)。SM_CXBORDER
:窗口边框的宽度(像素)。SM_CYBORDER
:窗口边框的高度(像素)。SM_CXDLGFRAME
:对话框边框的宽度(像素)。SM_CYDLGFRAME
:对话框边框的高度(像素)。SM_CYMENU
:菜单的高度(像素)。SM_CXFULLSCREEN
、SM_CYFULLSCREEN
、SM_CXICON
、SM_CYICON
等其他度量值。
# 获取屏幕宽度和高度
screen_width = win32api.GetSystemMetrics(0)
screen_height = win32api.GetSystemMetrics(1)
打开系统程序
win32api.WinExec('notepad.exe')
win32gui
win32gui:操作Windows图形用户界面,包括窗口、菜单、对话框等。
窗口句柄及参数
import win32gui
from win32con import *
hwnd = win32gui.FindWindow(None, "釘釘")
if hwnd:
print(f'窗口句柄:{hwnd}')
print(f'窗口标题:{win32gui.GetWindowText(hwnd)}')
print(f'窗口类名:{win32gui.GetClassName(hwnd)}')
rect = win32gui.GetWindowRect(hwnd)
left, top, right, bottom = rect
print("窗口位置:(左:{}, 上:{})".format(left, top))
print("窗口大小:(宽:{}, 高:{})".format(right - left, bottom - top))
parent_hwnd = win32gui.GetParent(hwnd)
child_hwnds = []
win32gui.EnumChildWindows(hwnd, lambda hwnd, param: param.append(hwnd), child_hwnds)
print("父窗口句柄:", parent_hwnd)
print("子窗口句柄:", child_hwnds)
向窗口发送命令
SendMessage
和 PostMessage
函数用于向窗口发送消息。SendMessage
会等待消息处理完成才返回,而 PostMessage
则立即返回。
# 向窗口发送一个关闭消息(WM_CLOSE)
win32gui.SendMessage(hwnd, win32con.WM_CLOSE, 0, 0)
修改窗口标题
win32gui.SetWindowText(hwnd, "新的窗口标题") # 修改窗口标题
窗口显示
win32gui.ShowWindow()函数可以显示、隐藏或最大化、最小化窗口。
win32gui.ShowWindow(hwnd, SW_HIDE) # SW_HIDE表示隐藏窗口
其他模块
win32com:提供了对COM(Component Object Model)对象的访问,可用于操作如Microsoft Office等应用程序。
win32process:用于管理Windows进程。
# 进程信息获取
import win32process
processes = win32process.EnumProcesses()
for process_id in processes:
print(process_id)