c# - 如何截取后台进程的屏幕截图?

标签 c# windows screenshot

我想建立一个系统,任何登录到我们本地网络上的机器的人都可以看到本地网络上任何其他机器屏幕上的内容。这是同行监督计划的一部分,并征得所有用户的同意。

所有机器都运行 Windows 7 或 10。理想情况下,我希望使用 iPad 的人也能看到屏幕。

我最初的想法是在每台机器上安装 IIS,并拥有一个可以捕获屏幕并按要求返回的网站。这样,另一台机器上的用户可以浏览到 http://machinename/。并查看屏幕截图。这适用于台式机和 iPad。

但是,我发现你不能那样访问屏幕,所以这个想法已经过时了。同样,Windows 服务似乎也无法访问屏幕。

我有哪些选择?我想要可以为所有用户安装一次的东西,并显示连接到该机器的屏幕上的内容。

最佳答案

与许多类似的问题一样,一个简单的解决方案只需要对 Windows session 隔离的工作原理有一些基本的了解,详见 posts like this .

由于您要捕获屏幕截图,因此您的代码必须在同一用户 session 中运行。然后,您从搜索引擎中找到的任何示例代码都将完美运行。

许多现有的屏幕捕获解决方案都是基于这种简单的方法构建的,并且通常有一个在用户登录时启动的 Windows 托盘应用,它通过调用捕获 API 来准备屏幕截图。

You cannot use a Windows service or a web app on IIS to call the capture API, because they run in session 0, not that user session.

在后台,还有其他必要的组件将屏幕截图发送到中央后端服务器(以便将它们发送到监控设备)。

Note that for this part multiple approaches/architectures can be used, so I won't share too much to restrict your imagination.

关于c# - 如何截取后台进程的屏幕截图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47442045/

相关文章:

windows - 如何使用 cat 文件安装驱动程序?

java - Selenium 中测试失败的截图

screenshot - Xamarin.UITest 屏幕截图位置

c# - WPF:当 IDataErrorInfo 时在自定义 DataGrid 单元格上显示工具提示消息

c# - string.format 格式化字符串包含 {

c# - 不返回任何行的 SELECT sql 语句的 ExecuteNonQuery

c# - 不使用接口(interface)掌握 API

c++ - 等待超时 - Windows

php - 在 Windows 下运行的 PHPLint 有哪些替代方案?

java - Java.Robot.createScreenCapture 中的透明度