news 2026/10/1 21:15:01

parsec-vdd 命令行实战指南:用 vdd 命令管理 Parsec 虚拟显示器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
parsec-vdd 命令行实战指南:用 vdd 命令管理 Parsec 虚拟显示器
  • 桌面应用
  • 驱动开发

【免费下载链接】parsec-vdd

✨ Perfect virtual display for game streaming

项目地址:https://gitcode.com/gh_mirrors/pa/parsec-vdd
点击查看免费下载

本文是 parsec-vdd(ParsecDisplay)项目 CLI 模式的完整使用指南。vdd命令行工具允许你在 Windows 10+ 上通过纯命令行添加、移除、枚举虚拟显示器,设置分辨率和刷新率,并查询驱动状态与版本——无需打开图形界面。读完本文,你将掌握vdd的全部命令语法、退出码语义、PowerShell 特殊写法,以及 CLI 背后的驱动调用原理,可直接用于脚本化批量管理虚拟显示器。

前置条件:安装驱动与获取 vdd

CLI 工具(vdd)随安装程序一起发布。从项目 Releases 页面获取以-setup.exe结尾的安装程序(v1.0 起提供),安装后即可在命令行环境中直接调用vdd。

在使用任何命令之前,必须确保 Parsec 虚拟显示驱动已正确安装。仓库的 README.md 提供了两种安装方式:

  • 下载驱动安装包后,用 7z 解压出驱动文件与nefconwCLI,再通过nefconw安装;
  • 直接以静默模式运行驱动安装程序:
.\parsec-vdd-0.45.0.0.exe /S

驱动版本与 Windows 版本存在对应关系(如 v0.45 对应 Windows 10 21H2、IddCx 1.5),详见 PARSEC_VDD_SPECS.md 中的驱动实现说明。

验证安装与命令总览

运行下面命令检查vdd是否已安装:

vdd -h

若安装成功,会输出完整的帮助文本,这也是全部命令的速查表:

vdd command [args...] -a|add - Add a virtual display -r|remove - Remove the last added virtual display X - Remove the virtual display at index X (number) all - Remove all the added virtual displays -l|list - Show all the added virtual displays and specs -s|set X WxH - Set resolution for a virtual display where X is index number, WxH is size, e.g 1920x1080 X @R - Set only the refresh rate R, e.g @60, @120 (hz) on Powershell, you should replace '@' with 'r' X WxH@R - Set full display mode as above, e.g 1920x1080@144 -v|version - Query driver version and status -h|help - Show this help

命令支持短横线(-a)与单词(add)两种等价写法,共六个操作:添加、移除、列出、设置模式、查询版本、显示帮助。这些帮助文本与源码 app/CLI.cs 中的ShowHelp()完全一致。

添加虚拟显示器(add)

使用-a或add添加一个虚拟显示器:

vdd -a

成功时输出:

Added a virtual display with index 0.

退出码即驱动索引:vdd -a的退出码是新增显示器的驱动索引(0–15),之后可以复用它来移除该显示器;负的退出码表示出错。从源码看,AddDisplay()会先检查已添加数量是否达到上限,再打开驱动句柄并发送IOCTL_ADD,成功后将索引作为返回值返回(app/CLI.cs)。

需要注意的是:驱动单适配器实际可创建 16 个虚拟显示器,但应用将上限控制在8个,以避免热插拔延迟,见 app/Vdd/Core.cs 中MAX_DISPLAYS => 8的注释。当数量达到上限时,add会抛出Exceeded limit (8), could not add more displays错误。

移除虚拟显示器(remove)

移除最后添加的显示器(无参数时等价于移除最大索引的显示器):

vdd -r

按索引移除(例如移除索引 0):

vdd -r 0

移除全部:

vdd -r all

all也接受*作为等价写法(见 app/CLI.cs)。移除全部时按驱动索引的逆序遍历,这样 Windows 10 的 Connectivity 注册表不会为幸存的显示器子集凭空生成一个新的默认模式配置;单个显示器的移除失败会作为 Warning 输出(Warning: failed to remove display at index X),循环继续,实现"尽力而为"(best-effort)。退出码语义:全部成功为0,存在任一失败为1(并输出Removed M/N displays.)。

源码中的RemoveDisplay()还会处理两种边界情况:没有任何显示器时输出No Parsec Display available.并返回 0;指定索引不存在时抛出Display index X is not found.(app/CLI.cs)。

列出已添加的显示器(list)

列出所有已添加的虚拟显示器及其规格:

vdd -l

退出码是已添加虚拟显示器的数量。示例输出:

Index: 0 - Device: \\.\DISPLAY37 - Number: 2 - Name: PSCCDD0 - Mode: 1600 x 900 @ 60 Hz - Orientation: Landscape (0°)

各字段含义:

字段说明
Index驱动索引,供remove/set使用
DeviceGDI 设备名(\\.\DISPLAYxx)
Number显示标识编号
Name显示器 ID,即PSCCDD0(驱动常量 app/Vdd/Core.cs)
Mode当前分辨率与刷新率
Orientation旋转方向,按 90° 步进(Landscape/Portrait 等,见 app/Display.cs)

若没有虚拟显示器,输出No virtual displays present.,退出码为 0。该命令的字段输出逻辑见 app/CLI.cs。

设置显示模式(set)

"分辨率"指像素尺寸(宽 × 高);"显示模式"在此基础上再加上刷新率,例如1920 x 1080 @ 60 Hz。set命令支持三种语法,分别对应三种解析模式(源码中的正则见 app/CLI.cs):

仅设置分辨率(索引 1 设置为 1920x1080):

vdd set 1 1920x1080

设置完整显示模式(分辨率 + 刷新率 120 Hz):

vdd set 1 1920x1080 @120

仅设置刷新率(保留当前分辨率,刷新率改为 144 Hz):

vdd set 1 @144

PowerShell 特例:由于@在 PowerShell 中有特殊含义,应把@替换为字母r:

vdd set 1 1920x1080 r120

注意r前缀是 CLI 对@的等价替换,其解析正则同时接受[r@](app/CLI.cs),因此上述三种语法在普通终端与 PowerShell 下均可正常使用。

失败行为:若目标显示器索引不存在,抛出Display index X is not found.;若分辨率/刷新率组合不受支持,ChangeMode返回失败并抛出Failed to set, display mode '...' is not supported.,命令以非零退出码结束。分辨率并非任意值,必须落在驱动预设的显示模式表中——完整的支持矩阵见 PARSEC_VDD_SPECS.md,其中默认模式为1920 x 1080 @ 60 Hz,常见预设包括:

分辨率常见名称纵横比支持刷新率(Hz)
3840 x 21604K UHD16:924/30/60/144/240
3440 x 1440—21.5:9 (43:18)24/30/60/144/240
2560 x 14402K16:924/30/60/144/240
2560 x 1080UltraWide21:924/30/60/144/240
1920 x 1080FHD16:924/30/60/144/240
1600 x 900HD+16:960/144/240
1280 x 720HD16:960/144/240

注:所有分辨率均兼容 60 Hz;低端 GPU(如 GTX 1650)在 DCI 4K 下串流可能出现异常。

底层实现上,set最终调用ChangeDisplaySettingsEx并携带CDS_UPDATEREGISTRY标志,将模式写入注册表(app/Display.cs)。

查询驱动状态与版本(version)

查询驱动状态和版本:

vdd -v

示例输出:

Parsec Virtual Display Adapter - Status: OK - Version: 0.45

可能的状态码及含义如下,状态码同时也是该命令的退出码:

状态码状态含义
0OK就绪可用
1INACCESSIBLE不可访问
2UNKNOWN未知状态
3UNKNOWN_PROBLEM未知问题
4DISABLED设备被禁用
5DRIVER_ERROR设备遇到错误
6RESTART_REQUIRED需重启电脑(可忽略但可能有问题)
7DISABLED_SERVICE服务被禁用
8NOT_INSTALLED驱动未安装

状态的判定来自 PnP 设备树:CM_Get_DevNode_Status检查驱动加载/启动标志与问题码(如CM_PROB_NEED_RESTART、CM_PROB_DISABLED等),映射到上述枚举,见 app/Device.cs。因此vdd -v返回8(NOT_INSTALLED)时,说明需要先安装驱动。QueryVersion()将IOCTL_VERSION返回的 32 位整数拆成主版本号与次版本号输出,并直接返回状态码作为进程退出码(app/CLI.cs)。

退出码速查与脚本化建议

综合各命令,退出码语义可归纳为:

命令退出码含义
vdd -a新增显示器的驱动索引(0–15),负数表示错误
vdd -r0 = 成功;1 =remove all中存在失败项
vdd -l当前已添加的虚拟显示器数量
vdd -s0 = 设置成功;非零 = 失败(索引不存在 / 模式不支持)
vdd -v驱动状态码(0–8,见上文状态表)
vdd -h0

由于退出码承载了索引、数量、状态码等多重语义,非常适合写进批处理或 PowerShell 脚本做条件判断,例如在游戏串流启动前保证存在一个 1920x1080@60 的虚拟显示器。

源码级实现原理

从源码结构看,CLI 的完整调用链如下:

  1. 入口分发:ParsecDisplay.exe收到首个参数-cli时,跳过 GUI 流程,将剩余参数交给CLI.Execute()(app/Program.cs)。Execute先调用AttachConsole(-1)附着到调用方终端,再按args[0]分发命令(app/CLI.cs)。
  2. 可执行文件包装:构建工程会在输出目录额外生成vdd.cmd批处理,内容为start /b /wait "" "ParsecDisplay.exe" -cli %*,这就是vdd命令的直接实现(app/ParsecDisplay.csproj)。安装程序将ParsecDisplay.exe与vdd.cmd一并部署到 PATH,从而可以在任意终端调用。
  3. 驱动交互:所有命令最终通过DeviceIoControl向驱动发送 IOCTL(IOCTL_ADD、IOCTL_REMOVE、IOCTL_UPDATE、IOCTL_VERSION,代码见 app/Vdd/Core.cs),其中添加与移除成功后都会附带一次IOCTL_UPDATE以刷新驱动会话。IOCTL 的CTL_CODE展开式与驱动实现说明见 PARSEC_VDD_SPECS.md。
  4. 前置校验:PrepareVdd()先查询驱动状态——NOT_INSTALLED时提示"请先安装驱动",非OK状态直接报错;add命令还会调用CheckAppRunning(),通过单实例命名事件(Program.AppId)确认 ParsecDisplay 应用正在运行(app/CLI.cs)。

常见问题与注意事项

  • vdd -v返回 8(NOT_INSTALLED):驱动未安装或安装不完整,按 README 的nefconw/静默安装流程重装。
  • vdd -v返回 6(RESTART_REQUIRED):设备需要重启才能生效,可先尝试重启系统。
  • vdd -a报 "Exceeded limit":已达到 8 个虚拟显示器的应用上限,先vdd -r all清理再添加。
  • set的@报错:在 PowerShell 中使用r前缀(如vdd set 1 1920x1080 r120)。
  • 设置不受支持的模式:先运行vdd -l查看当前模式,对照 PARSEC_VDD_SPECS.md 的预设矩阵选择合法值。
  • CLI 与 GUI 的关系:remove all的逆序移除策略在应用休眠、退出时同样被采用(README 提到"按驱动索引先移除后添加"的恢复顺序),保持一致的注册表行为;GUI 模式下显示器状态的持久化格式为WxH@Hz/O(见 app/Display.cs),理解它有助于排查跨会话恢复问题。

如需深入了解驱动 IOCTL 的底层结构、生命周期与状态码细节,可继续阅读 PARSEC_VDD_RE.md;驱动安装与项目整体说明见 README.md。

  • 桌面应用
  • 驱动开发

【免费下载链接】parsec-vdd

✨ Perfect virtual display for game streaming

项目地址:https://gitcode.com/gh_mirrors/pa/parsec-vdd
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 21:13:28

江苏区域S20变压器散热性能及影响因素实用分析

S20油浸式变压器散热结构与核心原理全密封S20油浸式变压器采用波纹油箱矿物油散热结构,正常运行条件下可满足-40℃到40℃环境的散热需求,相关性能指标均符合GB/T 6451油浸式变压器技术标准要求。对于负责县域电网台区扩容改造的采购专员来说,…

作者头像 李华
网站建设 2026/10/1 21:12:43

jianying-editor技能安装全攻略:环境配置、授权与自动化剪辑实践

1. 从零上手 jianying-editor 技能:安装前必须搞清楚的几件事剪映这款工具,做短视频的朋友应该都不陌生。但很多人不知道的是,剪映除了手动拖拽剪辑之外,还有一套可以被外部程序调用的能力接口,社区里通常把它叫做 jia…

作者头像 李华
网站建设 2026/10/1 21:12:30

一个每天能用10次gpt-image2.5的免费电商生图网站

电商人都知道,新品上架,往往就是和时间赛跑。主图、详情图、模特图、活动图全都要赶,不同平台还要适配不同尺寸,还得有细节展示……需求一多,美工排期跟不上,而且每次沟通、返工修改都是成本。有时候好不容…

作者头像 李华
网站建设 2026/10/1 21:11:50

【Unity UGUI源码深度解析】22|Selectable源码解析:交互状态机、导航算法与CanvasGroup约束

《UGUI源码深度解析》第 22 篇 界面小组工作日志 基准:Unity 2022.3.62f2c1 / 本地 UGUI 1.0.0。 人物与项目情节为虚构;源码机制以本地实现为准。 一、鼠标离开了,按钮怎么还亮着? 阿澈已经把事件路由排查清楚,却发现按钮在鼠标移开后仍保持高亮色。我猜 PointerExit 没…

作者头像 李华
网站建设 2026/10/1 21:11:26

上海适合跨境品牌推广的GEO服务商选择指南 避坑挑选指南

苏州聚合增长信息科技有限公司是国内较早布局AI生成式引擎优化赛道的科技企业,其推出的Juhe AI 3.0国际版专为出海企业打造一站式海外全网营销方案,覆盖全球40余种语言市场,以GEOA2PAgent三位一体架构,完整覆盖海外客户从产生需求…

作者头像 李华