找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 18781|回复: 20

[系统相关] 如何写批处理实现笔记本连接的外接显示器通电后自动关闭笔记本屏幕

[复制链接]
发表于 2025-5-16 20:46:14 | 显示全部楼层 |阅读模式
一台联想笔记本hdmi接口连接着一台外接显示器,平时都用笔记本屏幕,外接显示器电源是关着的。现想实现外接显示器电源打开后自动关闭笔记本屏幕。
手动设置方法:
显示-只在1显示器上显示。这样开机后屏幕只显示在外接显示器上。
若设置为复制这些显示,则两边都显示。
不知是否将需求描述清楚了,谢谢各位了!
发表于 2025-5-16 21:05:47 | 显示全部楼层
deepseek回答

DisplaySwitch.exe /internal
说明:

/internal 表示仅使用主显示器(显示器1)

其他可用参数:

/clone → 复制模式(当前模式)

/extend → 扩展模式

/external → 仅副显示器(显示器2)
发表于 2025-5-16 21:06:52 | 显示全部楼层
方法2:使用 PowerShell 调用 Windows API(更底层控制)
如果 DisplaySwitch.exe 不适用,可以使用以下脚本直接修改显示模式:

powershell
  1. Add-Type -TypeDefinition @'
  2. using System;
  3. using System.Runtime.InteropServices;

  4. public class DisplaySettings {
  5.     [DllImport("user32.dll")]
  6.     public static extern int SetDisplayConfig(
  7.         uint numPathArrayElements,
  8.         IntPtr pathArray,
  9.         uint numModeInfoArrayElements,
  10.         IntPtr modeInfoArray,
  11.         uint flags
  12.     );

  13.     public const uint SDC_TOPOLOGY_INTERNAL = 0x00000001;  // 仅主显示器
  14.     public const uint SDC_TOPOLOGY_CLONE = 0x00000002;     // 复制模式
  15.     public const uint SDC_TOPOLOGY_EXTEND = 0x00000004;    // 扩展模式
  16.     public const uint SDC_APPLY = 0x00000080;             // 应用更改
  17. }
  18. '@

  19. # 设置为仅主显示器
  20. [DisplaySettings]::SetDisplayConfig(0, IntPtr.Zero, 0, IntPtr.Zero,
  21.     [DisplaySettings]::SDC_TOPOLOGY_INTERNAL -bor [DisplaySettings]::SDC_APPLY)
复制代码
deepseek回答,未测试
发表于 2025-5-16 21:07:49 | 显示全部楼层
方法3:使用 nircmd(第三方工具)
自行下载 nircmd

nircmd.exe setdisplay monitor:1
 楼主| 发表于 2025-5-17 10:06:38 | 显示全部楼层
感谢兄弟热心相助,只是如何判断外接显示器电源是否接通
发表于 2025-5-17 16:56:05 | 显示全部楼层
vbs
  1. Set oWshShell = CreateObject("WScript.Shell")
  2. Set oWMI = GetObject("Winmgmts:\\.\Root\Cimv2")
  3. s = "SELECT * FROM Win32_PnPEntity WHERE Service = 'monitor'"
  4. Do
  5.     If oWMI.ExecQuery(s).Count = 2 Then
  6.         oWshShell.Run "DisplaySwitch.exe /internal", 0
  7.     End If
  8.     wsh.Sleep 1000
  9. Loop
复制代码
 楼主| 发表于 2025-5-18 17:41:28 | 显示全部楼层
vbs
czjt1234 发表于 2025-5-17 16:56



    请问这是整套的语句,还是要加上nircmd.exe setdisplay monitor:1?
发表于 2025-5-18 20:01:33 | 显示全部楼层
回复 7# tmp05


完整的代码
复制代码并保存为.vbs文件
 楼主| 发表于 2025-5-19 11:16:40 | 显示全部楼层
回复  tmp05


完整的代码
复制代码并保存为.vbs文件
czjt1234 发表于 2025-5-18 20:01

谢谢,去测试下再来回复。
 楼主| 发表于 2025-5-28 20:23:39 | 显示全部楼层
回复  tmp05


完整的代码
复制代码并保存为.vbs文件
czjt1234 发表于 2025-5-18 20:01

请问是不是把这个vbs文件放到开机启动项,win8.1系统,谢谢!
发表于 2025-5-28 21:18:24 | 显示全部楼层
回复 10# tmp05


可以的
 楼主| 发表于 2025-5-31 19:53:35 | 显示全部楼层
本帖最后由 tmp05 于 2025-5-31 20:04 编辑

运行出错,如图:


win8.1系统


这样设置可以关闭笔记本屏幕而显示在外接显示器上


这样是两边都显示


monitor.vbs https://wwos.lanzoub.com/iwSmg2xnxsza
发表于 2025-5-31 20:30:22 | 显示全部楼层
本帖最后由 czjt1234 于 2025-5-31 20:38 编辑

有点看不懂,总共9行,怎么提示第11行报错了
另存为ANSI呢

你在运行或在cmd里面运行 DisplaySwitch.exe /external 看看行不行

vbs是检测有几个显示器的,实现效果还是要这个 DisplaySwitch.exe 命令
 楼主| 发表于 2025-5-31 21:58:23 | 显示全部楼层
本帖最后由 tmp05 于 2025-6-1 08:08 编辑
有点看不懂,总共9行,怎么提示第11行报错了
另存为ANSI呢

你在运行或在cmd里面运行 DisplaySwitch.exe ...
czjt1234 发表于 2025-5-31 20:30

win8.1里没有这个 DisplaySwitch.exe,后在win10里测试了下,能运行,但要手动选择是扩展、复制,还是仅pc屏幕等四项,达不到所要求的效果
发表于 2025-6-1 09:04:17 | 显示全部楼层
我在win7是有这个 DisplaySwitch.exe 的
那你只能下载 nircmd 用第三方软件了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 12:10 , Processed in 0.020895 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表