首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找有关在Win7中定位挂钩的指南,以确定显示器是连接还是断开

查找有关在Win7中定位挂钩的指南,以确定显示器是连接还是断开
EN

Stack Overflow用户
提问于 2019-03-27 10:46:48
回答 1查看 74关注 0票数 0

将大量Win7视频设备分布在医疗保健环境中的多个不同位置。有时需求非常迫切,它们可以在片刻的通知中使用。每个设备通过HDMI连接到壁挂式电视。它们不会重新连接电缆,这会在设备下一次需要使用时导致问题。它造成了医疗保健的延迟。在过去的一周里,我一直在写一个小应用(最好是系统级的服务),它将检测display何时不再连接到PC,然后触发操作(例如EventLog条目,发送电子邮件警报等)。不幸的是,我所有的尝试都遇到了障碍。寻找点子。

我已经花了相当多的时间来研究我可能能够在Windows中浮出水面的方法或“钩子”,我可以触发。

我确实为SystemEvents.DisplaySettingsChanging创建了一个带有事件处理程序的c#控制台应用程序,它的工作方式正如我所希望的那样!我可以断开监视器的连接,它会发送一封警报电子邮件并写入一个事件日志条目(我们可以使用第三方工具进行监控,并发出警报,创建票据等)。虽然这个控制台应用程序工作得很好,但我需要它更多地作为一个隐藏的后台服务。我创建了一个具有相同功能的Windows服务,但我发现Windows服务中的事件处理程序可能比较棘手。我永远不能让EventHandler(SystemEvents_DisplaySettingsChanging)在Windows服务模式下触发。从那以后,我发现EventHandler DisplaySettingsChanged是一个用户级事件,当作为服务运行时,它只适用于当前用户,而不适用于系统级。

我测试了各种拔掉监视器的方法,并寻找windows报告“没有监视器”的方法。我尝试了WIn32_PnPEntity类和Win32_Video*类,它们都会报告监视器是OK状态,即使它没有连接。

我确实发现我可以在断开显示器连接时观察设备管理器,并看到显示器从显示器选项卡中消失。一定有什么办法能让我插手这件事。

我在想,我可以用一个定时器来运行一个windows服务,来检查这个钩子。如果显示器已连接,则不执行任何操作-如果未连接,则执行操作(发送警报、写入事件日志条目、创建票证等)

最终,我希望有一个带有计时器的Windows服务,它将在系统模式下运行,它基本上会重新运行如下检查:如果显示器已连接,则不执行任何操作。

如果未连接监视器,则发送警报、创建票证、创建事件日志条目等。

我已经在这上面花了很长时间,我必须在3/28上展示我的发现。

感谢您的帮助。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-03-28 12:39:31

我研究了WM_DEVICECHANGE和WM_DISPLAYCHANGE,但我都不能按我需要的方式工作,而且我的时间不多了。

我需要更多的时间来弄清楚这些(并捕获一般的windows消息)。

然而,我终于能够找到正确的钩子来实现我的目标。

我遇到的挑战是,无论我使用哪个类或程序集来检测监视器连接,我总是返回至少一个显示,即使它是物理断开的。

在PowerShell中,我发现使用WMI和Win32_PnPEntity,我可以拉取显示信息,如果没有连接显示器,DeviceID将总是返回Display\NVD0000\SomeGuid。当连接1个或2个监视器时,DeviceID将是一个十六进制变体,用于替换NVD之后的零(例如显示\NVD39E4\某个)。

知道我可以指望在没有连接显示器的情况下获得Display\NVD0000的deviceID,我使用ManagementObjectSearcher和Win32_PnPEntity构建了一个带有计时器的windows服务。计时器每10分钟运行一次,然后执行检查。

如果发现没有物理连接的显示器,它将触发一个事件日志条目,该条目可以使用外部监控工具(Xymon、Nagios等)进行监控,并可以采取警报/操作以确保其得到纠正。

我用HDMI显示器进行了测试。在关闭电源条件下使用显示器进行测试,并将显示器源更改为另一个输入条件(不是HDMI),并且我可以触发警报的唯一条件是电缆从PC物理断开时,这正是我想要的。

给猫剥皮的方法不止一种。我知道有其他开发人员可以在几分钟内迅速制定出一个精心设计的工作解决方案。考虑到我职业生涯中在C#上累积的屏幕次数(相对而言,不是很多),我对这个小小的胜利感到很高兴。

希望这能在未来对某些人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55369041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档