Windows服务无法在Windows 7中获取屏幕截图

时间:2011-09-17 10:33:48

标签: c# windows-services session-0-isolation

我有一个获取屏幕截图的Windows服务。但它只创造了黑屏。我知道这是因为会话0隔离。我在互联网上搜索,无法找到任何已批准的解决方案来解决这个问题。任何工作想法都会非常好。

1-有没有办法更改Windows服务的会话并获取另一个用户会话的桌面屏幕,如会话1,会话2?

2-有没有办法启动一个控制台应用程序,该应用程序在Windows服务的会话0以外的另一个会话中运行?

2 个答案:

答案 0 :(得分:5)

Windows服务设计为在没有用户连接的情况下运行,它的工作方式类似于服务器进程始终启动和监听,或者启动和执行某些操作,或者空闲。

我认为您需要的是一个客户端应用程序,它在每个已记录的用户会话中运行,然后在需要时完成工作,与服务进行通信以完成一些工作。

我在这里说,不是让Windows服务在 0 之外的其他会话中运行,而是可以创建一个小的可执行文件(可能根本没有UI)从启动文件夹启动每个用户登录的所有用户。然后,这样的应用程序在正确的会话中运行并且可以访问它,它可以获取屏幕截图,然后将其存储在自己的某个位置或调用Windows服务中的某些端点(始终在会话0中运行)并使服务详细说明屏幕截图取自客户端的应用程序。

这就是我这样做的方式,而不是尝试一些“神奇”来告诉Vista和7在用户会话中启动服务,最终在系统启动时尚未登录。

答案 1 :(得分:2)

  

有没有办法更改Windows服务的会话并获取其他用户会话的桌面屏幕,如会话1,会话2?

没有

  

有没有办法启动一个控制台应用程序,该应用程序在Windows服务的会话0以外的另一个会话中运行?

这可以做但是很麻烦。它涉及模拟登录用户,操纵用户令牌,以及使用CreateProcessAsUser()将进程启动到不同的会话。本文describes需要什么。

另外,您不需要控制台应用程序,因为这会在屏幕截图上显示控制台窗口。您只需要一个标准的Windows应用程序(使用GUI子系统),但不需要显示任何可见的窗口。