2009-06-16 139 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