如何解决使用c#在Windows服务上捕获屏幕截图的问题?

Dee*_*ent 1 .net c# screen-capture winforms

首先,我需要感谢Mr."eddie_cat",以便就我的问题提供有效的答复.他拥有"ScreenCapture"方法的功劳.虽然这种方法不能解决我的问题(在Windows服务端它不起作用),但我相信代码可以在普通的Windows窗体中用于屏幕捕获.

以为我无法找到解决问题的解决方案,我从"Davide Piras"先生那里找到了一个很好的建议.Windows服务无法在Windows 7中获取屏幕截图

他的帖子说:

"Windows服务的设计也是在没有用户连接的情况下运行,它的工作方式就像服务器进程总是向上和聆听,或者正在做某事或者空闲.

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

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

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

edd*_*cat 6

相反,使用它更简单:

Rectangle bounds = Screen.PrimaryScreen.Bounds;
Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
   graphics.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size);
}
bitmap.Save("C:\\temp\\test.png", ImageFormat.Png);
Run Code Online (Sandbox Code Playgroud)

您从其他问题中复制的代码旨在解决一个非常具体的问题.您不需要做所有这些只是为了捕获屏幕截图.:)