从Windows服务截屏

我有基于DirectShow的屏幕捕获软件。 在内部,它调用CopyScreenToBitmap函数来抓取屏幕。 然后图片被ffdshow压缩。 它作为桌面应用程序工作正常,但作为窗口服务,在某些计算机上它不起作用(黑色图片)。 我设置了“允许服务与桌面交互”并在当前用户帐户上运行该服务。 什么想法可能是错的?

我在Windows XP上测试它,但它也适用于Vista和7。

是的,它适用于所有计算机上的桌面应用程序,但在其中一些计算机上(在大多数计算机上)它作为服务失败。

除了允许访问桌面之外,请尝试此操作:

  1. 枚举所有窗口站: EnumWindowStations
  2. 找到登录用户的窗口站,并将其设为您的进程’窗口站: SetProcessWindowStation – 请参阅此线程中的示例
  3. 然后在此处将当前线程的桌面设置为窗口站的默认桌面
  4. 然后使用几种方法之一获取桌面的DC,包括

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

    祝好运

据我了解,在Vista中进行了一项更改,将服务移动到与控制台用户不同的桌面上。 虽然您勾选了“允许访问”桌面的框,但我认为您仍然需要务实地切换服务以使用该桌面。

这是一篇博客文章,其中包含一些有用的信息和示例 。

您是否测试过桌面应用程序在作为服务失败的同一台计算机上是否成功?