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

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

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

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

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

没有。

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

这可以做到,但它很混乱。 它涉及模拟登录用户,操纵用户令牌,以及使用CreateProcessAsUser()将进程启动到不同的会话。 本文介绍了所需的内容。

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

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

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

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

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