4

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

我在 Windows XP 上对其进行了测试,但预计它也可以在 Vista 和 7 上运行。

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

4

2 回答 2

4

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

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

于 2009-06-16T15:27:16.573 回答
4

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

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

    CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL)

    祝你好运

于 2009-06-16T15:36:53.153 回答