对于在 Windows XP/Vista/7/8 上运行的 .NET(任何版本)——是否可以为全屏应用程序保留一个屏幕并在其上显示数据/图形/任何内容,同时保持任何其他屏幕可供使用Windows UI 用户交互,例如桌面或其他应用程序?
这里的使用场景/规则如下:
PC 必须能够按原样运行所有程序。
.NET 内容不需要交互(即不需要按键、鼠标点击等)。
其他应用程序的其他 UI 或对话框无法穿透为显示 .NET 可执行文件的输出而保留的一个预定义屏幕。
具有 .NET 内容的预定义屏幕不得有可见的鼠标光标,并且其他屏幕必须有其光标边界,就好像根本没有额外的屏幕一样(即光标必须停在鼠标光标的边缘)一个或多个桌面)。
即使 PC 已锁定(即用户已登录但工作站已从 Explorer 锁定),内容也必须可见。
我知道我可以使用一些驱动辅助显示器或其他显示设备的外部 USB Controller 来实现这一点,然后手动构建要推送到该界面的内容/图形,但我想问我可以使用普通 WDDM 来实现吗带普通显示器的驱动程序?
编辑:为了进一步澄清 - 我知道有多种方法可以达到类似的结果,但这里的问题是是否可以遵守所有规范/规则以上。
最佳答案
在我看来,您正在设计一个纯粹用于输出(即显示图形/图表、视频等)的 .NET 应用程序。该应用程序必须有一个专用的监视器,并且没有其他应用程序(甚至光标应该能够进入监视器的边界)。
我的直觉是,虽然您可以将您的应用程序强制到特定监视器(XBMC 具有此功能),但我怀疑您是否可以阻止所有其他应用程序进入监视器的显示区域。
当我读到这个问题时,我脑子里突然闪过一些东西,我想“也许你想要类似于 cpu affinity 的东西,你可以在 Windows 中设置它,并强制你的应用程序只使用特定的 cpu 核心......也许有显示器/显示区域有类似的东西吗?”
果然,Windows 提供了这些功能:
http://msdn.microsoft.com/en-gb/library/windows/desktop/dd375340(v=vs.85).aspx
http://msdn.microsoft.com/en-gb/library/windows/desktop/dd375338(v=vs.85).aspx
你应该能够毫不费力地调用这些。但是,这只会解决您只能强制您的应用程序使用特定监视器的问题。至于系统中的所有其他应用程序,我怀疑您是否能够轻松控制它们的显示亲和性。
粗略地猜测,您需要使用另一个 Win32 API 调用来获取对系统中所有窗口句柄的引用,并检查它们的显示亲和性,如果它们显示在您的专用显示器中,则将它们移动到其他地方。
这可能有助于获取所有窗口句柄:
How to get list or enumerate all handles of unmanaged windows with same class and name
http://msdn.microsoft.com/en-us/library/ms633497%28VS.85%29.aspx
只是想我会把它放在那里,它可能没有帮助,但希望这能给你更多的指导。
编辑:我也发现了这个……可能会有一些用处
关于c# - 是否可以在 Windows 上使用 .NET 完全接管多个屏幕中的一个屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14860723/