2009-06-16 137 views
4

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

我在Windows XP上测试它,但它也有望在Vista和7上运行。

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

+0

什么版本的操作系统上运行您的服务无法正常运行的计算机? – 2009-06-16 15:10:57

+0

@bezieur:“它有望运作”!=“将工作”,甚至“有远程工作的机会”。你不应该在“预计会有效”的情况下运作,你应该测试它。 Win32服务模式在Vista和更高版本中发生了显着变化。 – 2009-06-16 15:51:41

+0

@Mihai:当然,你是对的!我只是想说它现在必须在XP上工作,但是在未来(短期内),需求将会在更新的ms os系统上工作:-)。 – bezieur 2009-06-18 09:39:17

回答

3

除了尝试使用此方法允许访问桌面:

  1. 枚举所有窗口站:EnumWindowStations
  2. 查找登录用户的窗口站,并使其你的进程窗口站:SetProcessWindowStation - 见例如in this thread
  3. 然后为当前线程设置桌面窗口站的默认桌面also here
  4. 然后得到d使用的几个方法之一桌面C,包括

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

    好运

0

您是否测试过桌面应用程序在相同的计算机上成功失败?

3

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

Here is a blog post with some useful info and examples