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

标签 c# .net winforms screen-capture

<分区>

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

以为我找不到解决问题的方法,我从先生那里找到了一个很好的建议“ 大卫·皮拉斯” Windows service couldnt get screenshot in windows 7

他的帖子说:

“Windows 服务被设计为在没有用户连接时也能运行,它的工作方式就像一个服务器进程,总是启动并监听,或者启动并做某事,或者空闲。

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

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

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

最佳答案

改用这个,简单得多:

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);

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

关于c# - 如何解决使用 C# 在 Windows 服务上捕获屏幕截图的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127652/

相关文章:

c# - OdbcConnection.Open() 出现奇怪的异常

.net - 访问 key 对 .NET Windows 窗体中的标签有何作用?

c# - 如何重写 TreeNode.Clone() 方法?

c# - Lambda 编译失败,引用在 '' 范围内定义,但未定义

c# - 在 Linux 上使用 .NET Core 2.0 进行 Process.Start

c# - TabControl 选项卡标题在更改字体时会调整大小

c# - 在独占线程约束下锁定

.net - 如何从 Telerik RadGrid 中删除自动生成的列?

c# - HashSet<T>.Contains() 对于大型列表、多线程是否高效?

c# - 让 Infragistics UltraWinGrid 在添加或删除行时调整高度