GPUSwitch 是一款为 Windows 10/11 用户设计的轻量级显卡首选项管理工具。它通过“进程监听 + 动态重启”的技术方案,解决了双显卡笔记本电脑显卡切换繁琐的痛点。
某些轻量级软件或游戏启动时自动使用独立显卡,导致性能过剩或大量发热。使用核心显卡启动时,使用独显的OBS又无法开启录屏,本程序为了解决每次启动游戏均要去设置里更改显卡设置而生,可设置为在每次启动游戏时询问使用哪种显卡。
GPUSwitch 提供了一个全局管理界面,允许你一键管理所有应用的显卡偏好,并支持在程序启动时弹窗询问,手动更改此次启动所用的显卡。
- 实时监听:后台静默运行,秒级感知目标程序启动。
- 强力拦截:独创“重启拦截”逻辑,确保显卡配置在程序加载渲染引擎前生效。
- Win11 视觉:完美契合 Windows 11 的圆角、扁平化 UI 设计,支持搜索与排序。
- 安全无害:不劫持系统进程,不修改 HKLM 敏感注册表,无需管理员权限(普通权限即可修改 HKCU 偏好)。
本程序弃用了传统的 IFEO (Image File Execution Options) 劫持方案,采用了更稳定的组合技术栈:
程序利用 WMI (Windows Management Instrumentation) 的事件订阅机制。
- 实现方法:通过
Win32_Process的Creation事件监听系统进程树的变化。 - 优势:相比于死循环轮询,WMI 监听几乎不占用 CPU 资源,且响应极其迅速。
- 实现方法:直接读写注册表路径
HKCU\Software\Microsoft\DirectX\UserGpuPreferences。 - 逻辑:Windows 会在应用初始化 DirectX 或 Vulkan 环境前读取该键值。通过在此处写入
GpuPreference=2;(高性能)或1;(省电),引导系统分配正确的 GPU 核心。
为了解决“程序已启动,修改注册表太晚”的问题,程序执行以下原子操作:
- 识别:获取目标进程的 PID。
- 终结:利用
psutil的kill()方法强制结束进程。 - 冷却:执行 1 秒的阻塞式等待 (
time.sleep),确保操作系统彻底释放文件锁和驱动句柄。 - 拉起:使用
os.startfile重新启动程序,此时程序会读取到刚刚写入的新显卡配置。
- 逻辑:引入基于时间戳的冷却字典。当程序被 GPUSwitch 重启后,其产生的第二次启动事件会被冷却逻辑(默认 10 秒)拦截,从而避免出现无限弹窗循环。
- Python 版本:3.12 (强烈建议,避开 3.14 等预览版的 PyInstaller 兼容性问题)。
- 依赖项:
pip install PySide6 wmi pypiwin32 psutil
-
操作系统:仅支持 Windows 10 (版本 1803 或更高) 及 Windows 11。
-
注意:Windows 7 和 Windows 8 缺乏系统级的应用显卡首选项接口,因此无法支持。
-
硬件要求:
-
电脑需具备多显卡环境(如:核显 + 独显)。
-
台式机用户需在 BIOS 中开启
iGPU Multi-Monitor(或核显多显示器支持等类似选项)以确保核显处于活跃状态。 -
软件依赖:Python 3.12 (推荐版本)。
- 克隆仓库:
git clone https://github.com/JasonHu051219/GPUSwitch.git
- 运行程序:
直接运行
GPUSwitch.py,或在Releases中下载编译好的.exe。 - 添加应用: 点击“添加新程序”,勾选“启用弹窗重启”。
- 体验切换: 从桌面双击你的游戏或软件,在 GPUSwitch 的询问弹窗中选择显卡,程序将自动重启并以正确显卡运行。
- 搜索功能:实时过滤列表,快速定位应用。
- 排序功能:点击表头即可按名称或路径拼音排序。
- 状态追踪:未保存的修改会高亮提醒,点击“应用所有更改”统一写入。
本项目基于 MIT License 开源。你可以自由地使用、修改和分发。