【发布时间】:2014-11-25 11:37:13
【问题描述】:
首先,我需要感谢“eddie_cat”先生对我的问题提供有效的回应。他拥有“ScreenCapture”方法的功劳。虽然这个方法不能解决我的问题(在windows服务端它不起作用),但我相信代码可以在正常的windows窗体中用于屏幕截图。
以为我找不到解决问题的方法,我从先生那里找到了一个很好的建议。” 大卫·皮拉斯"Windows service couldnt get screenshot in windows 7
他的帖子说:
“Windows 服务被设计为在没有用户连接的情况下也能运行,它的工作方式就像一个服务器进程始终启动并监听,或启动并做某事,或空闲。
我认为您需要的是一个客户端应用程序,它在每个登录的用户会话中运行并最终完成工作,然后在需要时与服务通信以完成一些工作。
我在这里说的是,您可以创建一个小的可执行文件(可能根本没有 UI),而不是让 Windows 服务在另一个会话中运行,而不是在每个用户登录时从所有用户的启动文件夹启动。这样的应用程序然后在适当的会话中运行并可以访问它,它可以获取屏幕截图,然后将其存储在某个地方或在您的 Windows 服务中调用一些端点(始终在会话 0 中运行)并使服务详细说明屏幕截图取自它的客户端应用程序。
我会这样做,而不是尝试一些“魔术”来告诉 Vista 和 7 在系统启动时最终尚未登录的用户会话中启动服务。”
【问题讨论】:
-
实际上,我只需要简单的方法来捕获整个屏幕然后将其保存到文件中。任何简单的解决方案都非常受欢迎。
-
@Marc B,格兰特·温尼。我的问题是与他人的分歧。我的问题是由于尝试在 Windows 服务器中捕获屏幕而导致服务器捕获会话屏幕而不是用户活动窗口会话。
-
仍然是重复的,但不是列出的问题。请改成这个stackoverflow.com/questions/18891819/…
-
@Marc B,格兰特·温尼。我对堆栈溢出做了很多研究。这个问题似乎与其他问题重复,但所有这些问题都没有详细的代码级别答案。所以我想在这里再次解决我的问题并期待代码级别的帮助。所以请从我的问题标题中删除[重复]。
-
@eddie_cat。谢谢!我刚刚阅读了来自“Davide Piras”stackoverflow.com/questions/7454106/… 的一些帖子。他说:“我在这里说的是,您可以创建一个小的可执行文件(可能根本没有 UI),而不是让 Windows 服务在另一个会话中运行,而不是在每个用户登录时从所有用户的启动文件夹启动. 这样的应用程序然后在适当的会话中运行并可以访问它,它可以获取屏幕截图然后将其存储在自己的某个地方或调用您的 Windows 服务中的某些端点..."
标签: c# .net winforms screen-capture