隐藏监视器,仅通过我的应用程序使用它

14
我需要将显示器作为我的特殊应用程序的“私密”设备,我想将其用作一种手电筒,并在全屏幕上绘制特殊图案。我不希望操作系统(Windows 7)将此显示器识别为普通显示器。也就是说,用户不应该能够将鼠标移动到该显示器上,或更改其分辨率,或在其上运行屏幕保护程序或其他任何操作。但是我想要能够从我的应用程序与它进行交互。显示器使用HDMI电缆插入显卡(很可能是nVidia)。
最简单的方法是什么?所有解决方案都受到欣赏,包括购买额外的适配器或简单的显卡,或任何其他特殊设备。目前唯一能想到的解决方案是将显示器连接到另一台计算机上,在该计算机上运行后台程序,通过以太网或其他方式将其连接到我的计算机,然后从我的计算机与该程序进行通信。这相当丑陋,并且需要使用额外的计算机。但我必须解决这个问题。

1
你可能需要反过来做 - 在虚拟机内运行“用户”操作系统,而在其外部运行应用程序。这样,您应该能够将VM操作系统限制为仅使用其中一个显示器,而您可以访问两个显示器。当然,这也有代价 - 虚拟化仍然不完美,如果用户必须执行GPU密集型任务,则可能会出现问题。 - Luaan
@Luaan,谢谢。这是一个选项,但这种解决方案的复杂性非常高 - 与使用带有守护程序的另一台计算机相当。希望能找到更简单的东西。 - Steed
查找一个显卡的开源驱动程序,并可能修改它们,使其不再是操作系统中的显卡,而是您的应用程序知道正确使用其API。http://www.codeproject.com/Articles/12878/Driver-Development-Part-6-Introduction-to-Display http://en.wikipedia.org/wiki/Free_and_open-source_graphics_device_driver#Free_and_open-source_drivers - soulseekah
@soulseekah,树莓派正是我要做的事情,似乎也是最简单的方法。 至于编写自己的显卡驱动程序,我甚至无法想象需要花费多少时间。但我会学习你提供的链接,或许能更加清晰明了。 - Steed
3
请参见使用多个显示器作为独立显示器这篇文章中提供了分离监视器的代码。 - Raymond Chen
显示剩余4条评论
3个回答

6
为了做到这一点,需要将显示器从桌面上拆卸下来。将显示器从桌面上拆卸下来可以防止Windows将其用于正常的UI。
附加和拆卸监视器的示例代码在此KB文章中。完成后,您可以将显示器用作独立显示器

我们有一个获胜者!:( - NothingsImpossible
亲爱的@NothingsImpossible,我很乐意为您的答案提供50点赏金,但我不能提供少于200点的其他赏金; - Steed

2

在你自己想要使用外部PC的基础上,以及马克关于使用VM作为这个“外部”设备的评论:

您可以购买一个外部USB-to-VGA视频适配器,例如这些之一,约40美元:

USB-to-VGA adapter

http://www.newegg.com/USB-Display-Adapters/SubCategory/ID-3046

几乎所有VM软件都支持某种类型的USB直通。 VirtualBox是一个很好的例子。 只有VM看到USB设备,主机完全忽略它。 所以步骤如下:

  1. 购买所述的USB-to-VGA适配器。
  2. 配置轻量级虚拟机并编写一个小实用程序通过网络接收要显示在屏幕上的图像。
  3. 将VirtualBox配置为直接连接USB-to-VGA适配器到虚拟机。

哈哈,好聪明的技巧!当你可以模拟硬件时,就不需要费心去处理它了。缺点是在启动应用程序之前需要配置和运行虚拟机,但另一方面,你不需要配置第二台计算机的以太网连接,也不需要等待其启动。 - Steed
1
@Steed 是的!此外,VirtualBox还有一个不错的命令行界面,允许进行无头、仅控制台会话 - 因此您应该能够从应用程序内部启动虚拟机并将其隐藏在用户之外 - 同时USB显示器仍然可以正常工作。这需要一些工作,但您可以使其完全透明。 - NothingsImpossible
我一直怀疑VB应该有控制台模式,但从未尝试过,谢谢。唯一剩下的问题是找到一个带有Linux驱动程序的USB-VGA(-DVI / -HDMI)适配器,以避免购买另一个Windows许可证。我想我们会解决这个问题的;) - Steed

1
这里有另一种简单的解决方案来监控您的应用程序。
您的应用程序应提供API监视服务,作为HTTP在任何端口上提供(例如http://{userip}:{port}/{appname}/monitor)。
您的应用程序自我监视,将监视数据保存在内存中、本地文件或数据库中,对用户隐藏。监视器API向任何设备提供此数据,该设备具有浏览器(平板电脑、手机、上网本、安卓迷你PC、低成本Linux设备、任何PC或任何操作系统...从互联网、您的LAN或直接连接到托管应用程序的PC)。
优点:
收集(和提供)要监视的数据在您的应用程序中:只有一个可执行文件
显示可以远程完成:从任何地方!
使用标准HTTP身份验证机制轻松进行访问安全性
您可以监视多个应用程序(即多个监视URL)
您可以自由使用任何浏览器进行监视(甚至是同一台PC上的本地窗口浏览器进行测试)
从您想要的任何硬件和操作系统进行监视
简单而灵活!

缺点:

  • 虽然很少,但告诉我...

选择此解决方案取决于您需要监视什么类型的数据(文本、图像、视频...),以及刷新速率取决于您的系统网络配置。

希望有所帮助 :)


谢谢你的努力!你的解决方案详细阐述了一个独立设备的想法,并建议使用HTTP协议(网页)传输我的图像。不幸的是,我们不需要监控我们的应用程序 - 我们需要在监视器(显示器)上绘制图案。而这个过程需要由应用程序控制,而不是由某人以相当高的帧率刷新网页来控制。这使得浏览器解决方案变得不太相关;(抱歉,我和Mikhail应该在问题中更清楚地说明这一点。 - Steed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接