从Windows服务抓屏(Screen capture from windows service)

2019-06-23 09:53发布

我有基于DirectShow的屏幕捕捉软件。 在内部调用CopyScreenToBitmap功能抓取屏幕。 然后将图片通过ffdshow的压缩。 它工作正常,作为一个桌面应用程序,但作为窗口服务,某些计算机上它不工作(黑画面)。 我设置了“允许服务与桌面交互”,并运行在当前用户帐户的服务。 任何想法可能是错误的?

我测试了在Windows XP中,但预计在Vista和7个正常工作。

是的,它可以作为所有计算机上的桌面应用程序,但他们中的一些(对他们大多数)失败作为一种服务。

Answer 1:

试试这个,除了允许访问桌面:

  1. 枚举所有窗口站: EnumWindowStations
  2. 查找登录用户的窗口站,并使其你的进程窗口站: SetProcessWindowStation -见例如在这个线程
  3. 然后设置在桌面上为您的当前线程的窗口站的默认桌面也在这里
  4. 然后用得到的一些方法之一桌面的DC,其中包括

    的CreateDC(TEXT( “DISPLAY”),NULL,NULL,NULL)

    祝好运



Answer 2:

据我了解,一个变化是在Vista中提出,移动服务到从控制台用户一个单独的桌面。 虽然你已经打勾框“允许访问”到桌面上,我觉得你还是要务实地切换为您服务,使用该桌面。

这里是一个博客帖子有一些有用的信息和示例 。



Answer 3:

你有没有测试的桌面应用程序成功失败作为服务相同的计算机上?



文章来源: Screen capture from windows service