【发布时间】:2010-11-29 13:38:47
【问题描述】:
我们必须从 Windows 服务运行一个进程并从中获取屏幕截图。
我们尝试了 BitBlt 和 PrintWindow Win32 调用,但都给出了空白(黑色)位图。
如果我们从普通用户进程运行我们的代码,它就可以正常工作。
这是可能的吗?或者有没有其他方法可以尝试?
我们尝试过的事情:
- Windows 服务作为本地系统运行,进程作为本地系统运行 -> 屏幕截图失败
- Windows 服务以管理员身份运行,以管理员身份运行进程 -> 屏幕截图失败。
- 以用户 XYZ 身份运行的 Windows 应用程序以 XYZ 身份运行进程 -> 屏幕截图适用于 BitBlt 或 PrintWindow。
- 尝试从本地系统检查“允许服务与桌面交互”
我们还注意到 PrintWindow 更适合我们的情况,如果窗口位于另一个窗口后面,它就可以工作。
对于其他要求,父进程和子进程必须在同一用户下。我们不能真正使用从一个进程到另一个进程的模拟。
【问题讨论】:
-
您是否尝试过允许服务与桌面交互?
-
非常好的主意,但也没有奏效。我还认为,当我以管理员用户身份运行它时,就相当于这样做了。您不能作为用户并从管理控制台中选中“允许服务与桌面交互”——它已被禁用。
-
我们能够解决这个问题。看一下示例代码:stackoverflow.com/a/45095509/125406
标签: c# .net windows-services process screenshot