2014-10-17 67 views
2

我需要在Windows中使用SDL作爲服務應用程序的一部分。沒有窗口的SDL(Windows服務)

應用程序的基礎是截取用SDL打開的3D文件的截圖,並且開箱即用。

問題是,當應用程序在Windows的服務上下文中啓動時,SDL_Init抱怨。

沒有可用的顯示器

我知道,如果我不使用一個窗口,我不會有從鍵盤和鼠標輸入,反正我也不需要他們對我的應用程序。

有沒有什麼辦法讓SDL在Windows上離屏?我聽說mesa/osmesa,但它似乎只在Linux上

+0

你打算如何從服務截圖。您的服務在會話0中運行,並且無法在任何交互式會話中看到桌面。 – 2014-10-17 09:08:22

+0

該屏幕截圖是由SDL應用程序使用glReadPixels()方法拍攝的。但是我可以適應它,如果我得到屏幕外緩衝區,代表視圖的像素 – strategesim 2014-10-17 09:16:43

+0

因此,您在桌面上有一個進程需要屏幕截圖,並且您希望將其發送到處理圖像的服務進程。正確? – 2014-10-17 09:27:27

回答

0

它在我看來,這可以通過更改您的服務屬性,也許一些技巧與Windows註冊表完成。我還沒有嘗試過,但這篇文章和評論可能會有用:https://lostechies.com/keithdahlby/2011/08/13/allowing-a-windows-service-to-interact-with-desktop-without-localsystem/。以下是有關該主題的MSDN條目(請參閱「使用交互式服務」部分):https://msdn.microsoft.com/en-us/library/windows/desktop/ms683502%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396。儘管至少MSDN文章着眼於通過與用戶通過GUI進行服務交互的觀點來解決這個問題,但與服務與圖形的交互有點不同。

一旦我遇到正在使用SDL的應用程序,並且在從服務啓動時未能正確初始化自身。將環境變量SDL_VIDEODRIVER設置爲'dummy'幫助我比。使用此設置,應用程序的圖形功能看起來工作正常(儘管我非常不確定這是否足以滿足打開3D文件的用例)。