Python-pywin32库的使用

目录

win32api模块

警告提示对框

删除和复制文件

获取时间

系统警告提示音

自定义声音播放

检索系统级度量信息

打开系统程序

win32gui

窗口句柄及参数

向窗口发送命令

修改窗口标题

窗口显示

其他模块


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)
参数名类型描述
frequencyint声音的频率(单位:赫兹,Hz)。有效范围:37 Hz 到 32767 Hz。262 Hz (中音C)、440 Hz (标准音A)、1000 Hz (高频提示音)
durationint声音的持续时间(单位:毫秒,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_CXFULLSCREENSM_CYFULLSCREENSM_CXICONSM_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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值