从Windows服务截屏

时间:2009-06-16 15:01:26

标签: c# c++ windows-services screen-capture

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

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

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

3 个答案:

答案 0 :(得分:3)

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

Here is a blog post with some useful info and examples

答案 1 :(得分:3)

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

  1. 枚举所有窗口站:EnumWindowStations
  2. 找到已登录用户的窗口工作站,并将其设为您的流程“窗口工作站:SetProcessWindowStation - 请参阅示例in this thread
  3. 然后将当前线程的桌面设置为窗口站also here
  4. 的默认桌面
  5. 然后使用以下几种方法之一获取桌面的DC,包括

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

    祝你好运

答案 2 :(得分:0)

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