当第二台显示器连接时运行脚本

当第二台显示器连接时运行脚本

我目前有一台电视通过 HDMI 连接到我的电脑。当我将电视的输入设置为适当的 HDMI 端口时,电脑就会看到它,并且电脑会将其添加为第二个显示器。

我想要做的是在连接辅助显示器时运行一个脚本(启动 XBMC)。

操作系统是Windows 8。

答案1

您可以在 AutoHotKey 或 AutoIt 中执行此操作。它们可以挂接 WinApi,非常简单,创建一个 .ahk 文件并使用 AutoHotkeyU64.exe 运行它

OnMessage(0x219, "MsgMonitor")
MsgMonitor(wParam, lParam, msg)
{
    if (wParam = 7) {
        Run, Notepad.exe
    } Else {
        MsgBox probably disconected. do something else
    }
    MsgBox check %wParam% and %lParam% and decide to run programs with %msg%
}
;wParam: 7 lParam: 0  monitor connected
;wParam: 32772 lParam: 8977536 should be on disconected

我没有任何 HDMI 设备可以测试它,但是当我断开主显示器上的 DVI 电缆时它可以工作。

答案2

我得到了wParam 7lParam 0显示器已连接和已断开连接的信息。所以我用SysGetMonitorCount计算监视器的数量来确定它们是否已连接或断开连接。

SysGet, oldMonitorCount, MonitorCount
OnMessage(0x219, "MsgMonitor")
MsgMonitor() {
  global oldMonitorCount
  Sleep 5000 ; needs time to detect any new monitors
  SysGet, newMonitorCount, MonitorCount
  if (oldMonitorCount = newMonitorCount) {
    MsgBox Some other device was (un)plugged
  } else {
    if (newMonitorCount = 2) {
      MsgBox Docked - battle station ready for action.
    } else {
      MsgBox Undocked - be free!
    }
  }
  oldMonitorCount := newMonitorCount
}

我认为以上内容OnMessage(0x219)来自此 Windows 消息列表。值得注意的是,代码0x0219与 相关联WM_DEVICECHANGE。这意味着它会在以下情况下触发任何设备已(未)插入,包括 USB 设备。对我来说,这包括插入耳机。为了解决这个问题,我跟踪当前显示器数量,然后仅在该数字发生变化时运行我的脚本。

相关内容