jon*_*ers 5 .net c# windows-services screenshot process
我们必须从Windows服务运行一个进程并从中获取屏幕截图.
我们尝试了BitBlt和PrintWindow Win32调用,但都给出了空白(黑色)位图.
如果我们从普通用户进程运行我们的代码,它就可以正常运行.
这有可能吗?或者可以尝试另一种方法吗?
我们尝试的事情:
我们还注意到PrintWindow对我们的情况更好,如果窗口在另一个窗口后面,它可以工作.
对于其他要求,父进程和子进程必须位于同一用户下.我们无法真正使用从一个进程到另一个进程的模拟.
目前我找不到相应的链接,但问题是,Windows服务在另一个会话中运行而不是普通的用户应用程序.
在XP中,这并不完全正确.以下是在会话0中启动的所有服务,登录系统的第一个用户也将在会话0中运行.因此,在这种情况下,允许服务与桌面工作交互等技巧.但是,如果您快速切换到另一个用户,他将获得会话1,并且没有机会直接与该服务进行交互.如果通过RDP连接到服务器版本(如2003或2008),也是如此.这些登录也将在高于0的会话中启动.
最后但并非最不重要的是,使用与桌面的交互还有另一个缺点:
如果启用此选项并且您的服务在(默认)SYSTEM帐户下运行,则它将无法再创建网络连接.
获得与服务一起使用的自定义GUI的正确方法是将它们分成两个进程并进行某种IPC(进程间通信).因此,当机器启动时,服务将启动,并且将在用户会话中启动GUI应用程序.在这种情况下,GUI可以创建屏幕截图,将其发送到服务,服务可以使用它,无论您喜欢什么.
我认为这是不可能的。
我们必须改变我们的场景,即我们的应用程序不是从服务启动的,而是一个标准的 Windows 程序,角落里有一个 NotifyIcon。
如果有人仍然找到真正的答案,请告诉我。
| 归档时间: |
|
| 查看次数: |
5001 次 |
| 最近记录: |