本文目录导读:

- 1. Windows - PowerShell
- 2. Windows - Python(pywin32 + comtypes)
- 3. macOS - Bash/Shell
- 4. Linux - X11 (xrandr)
- 5. 跨平台 Python 方案(使用 pyautogui 简版)
- 6. 浏览器端 JavaScript
- 7. 专业工具命令行方式
- 总结推荐
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获取精确值,浏览器方案仅用于前端调试。