怎么用脚本获取屏幕刷新率

wen 实用脚本 1

本文目录导读:

怎么用脚本获取屏幕刷新率

  1. 1. Windows - PowerShell
  2. 2. Windows - Python(pywin32 + comtypes)
  3. 3. macOS - Bash/Shell
  4. 4. Linux - X11 (xrandr)
  5. 5. 跨平台 Python 方案(使用 pyautogui 简版)
  6. 6. 浏览器端 JavaScript
  7. 7. 专业工具命令行方式
  8. 总结推荐

Windows - PowerShell

# 方法1:通过WMI获取(支持多显示器)
Get-WmiObject -Namespace "root\wmi" -Class "WmiMonitorBasicDisplayParams" | 
    Select-Object -ExpandProperty DisplayFrequency
# 方法2:获取当前主显示器刷新率
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Screen]::PrimaryScreen.BitsPerPixel
$refreshRate = [System.Windows.Forms.Screen]::PrimaryScreen.DeviceName
# 通过DirectX获取更精确值(需要安装DirectX SDK)

Windows - Python(pywin32 + comtypes)

import comtypes.client
def get_refresh_rate():
    # 创建WMI连接
    wmi = comtypes.client.GetObject("winmgmts:\\\\.\\root\\wmi")
    monitors = wmi.ExecQuery("SELECT * FROM WmiMonitorBasicDisplayParams")
    for monitor in monitors:
        print(f"显示器刷新率: {monitor.DisplayFrequency} Hz")
        return monitor.DisplayFrequency
get_refresh_rate()

依赖安装

pip install comtypes

macOS - Bash/Shell

# 通过系统报告获取(需要管理员权限)
system_profiler SPDisplaysDataType | awk '/Resolution.*@/{print $NF}' | head -1
# 更精确的方法(使用CoreGraphics框架)
python3 -c "
import Quartz
displays = Quartz.CGDisplayCopyAllDisplayModes(Quartz.CGMainDisplayID(), None)
for mode in displays:
    refresh = Quartz.CGDisplayModeGetRefreshRate(mode)
    if refresh > 0:
        print(f'最高刷新率: {refresh:.0f} Hz')
        break
"

注意:macOS 10.15+ 可能需要授予辅助功能权限。


Linux - X11 (xrandr)

# 获取当前显示器的刷新率
xrandr --query | grep connected | cut -d' ' -f3- | awk '{print $1}' | xargs -I {} xrandr --query {} | awk '/\*/{print $NF}'
# 更直接的方式(假设主显示器为eDP-1)
xrandr | grep " connected" | awk '{print "xrandr --query", $1}' | bash | grep "*" | awk '{print $NF}'

解析示例输出

eDP-1 connected primary 1920x1080+0+0 60.00*+ 59.94  
60.00 Hz

跨平台 Python 方案(使用 pyautogui 简版)

import pyautogui
import tkinter as tk
# 方法1:pyautogui 无法直接获取刷新率,但可以通过监控屏幕变化估算
# 方法2:使用 tkinter 获取系统信息(不准确)
root = tk.Tk()
refresh = root.winfo_screenwidth()  # 这是分辨率,非刷新率
root.destroy()

推荐使用专业方案

  • Windows: wmic path Win32_Monitor get RefreshRate
  • Linux: xrandr --verbose | grep -i "Refresh"
  • macOS: pmset -g therm 或使用 Quartz 框架

浏览器端 JavaScript

// 通过 requestAnimationFrame 估算刷新率
let lastTime = performance.now();
let frames = 0;
function measureFPS() {
  frames++;
  const now = performance.now();
  const elapsed = now - lastTime;
  if (elapsed >= 1000) {
    const fps = frames / (elapsed / 1000);
    console.log(`估算刷新率: ${Math.round(fps)} Hz`);
    frames = 0;
    lastTime = now;
  }
  requestAnimationFrame(measureFPS);
}
// 启动测量(需在HTML页面运行)
// measureFPS();

注意:此方法只能估算,实际刷新率可能受帧同步(VSync)影响。


专业工具命令行方式

Windows (dxdiag)

dxdiag /t dxdiag_report.txt
findstr /C:"Current Refreshrate" dxdiag_report.txt

Linux (glxinfo)

glxinfo | grep "screen #0" -A 5 | grep "refresh" | awk '{print $2}'

总结推荐

操作系统 最佳方案 示例代码
Windows PowerShell + WMI Get-WmiObject -Namespace root\wmi -Class WmiMonitorBasicDisplayParams \| fl DisplayFrequency
macOS Python + Quartz 见上文 macOS 段
Linux xrandr 命令 xrandr \| grep "*" \| awk '{print $NF}'

通用建议:对于脚本自动化,推荐使用 PowerShell (Windows) 或 Python (跨平台),配合系统级API获取精确值,浏览器方案仅用于前端调试。

抱歉,评论功能暂时关闭!