2011-09-17 84 views
2

我有一個獲取屏幕截圖的Windows服務。但它創造的只有黑色屏幕。我知道這是因爲會話0隔離而發生的。我在互聯網上搜索,並找不到任何批准的解決方案,這個問題任何工作的想法將是非常好的。Windows服務無法在Windows 7中獲取屏幕截圖

1 - 有沒有辦法來改變窗口服務的會議,並得到其他用戶的會話的桌面屏幕像會話1,會話2?

2 - 有沒有開始運行在從Windows服務,而不是會話0以外的其他會話一個控制檯應用程序呢?

回答

2

有沒有辦法改變一個Windows服務的會話,並得到另一個用戶的會話,如會話1,會話2的桌面屏幕?

有沒有開始運行在從Windows服務,而不是會話0以外的其他會話一個控制檯應用程序呢?

這是可以做到,但它的混亂。它涉及冒充登錄用戶,操縱用戶令牌,以及啓動一個進程到與CreateProcessAsUser()不同的會話。這篇文章describes需要什麼。

另外,您不需要控制檯應用程序,因爲它會在屏幕截圖上顯示控制檯窗口。你只需要一個標準的Windows應用程序(使用GUI子系統),但不顯示任何可見的窗口。

5

一個窗口服務旨在也運行時沒有用戶連接時,它就像一個服務器進程始終聽,或者起來做一些事情,或者閒置。

我想你需要的是一個運行中的每個登錄用戶的會話,並最終完成這項工作,然後,如果需要的話,用隨身攜帶做了一些工作服務通信的客戶端應用程序。

我在這裏說的是,不是在另一個會話中運行Windows服務,而是在另一個會話中運行,而不是在每個所有用戶的啓動文件夾中創建一個小的可執行文件(可能根本沒有UI)用戶登錄。這樣的應用程序然後在適當的會話內運行並且可以訪問它,它可以獲得屏幕截圖,然後將其存儲在自己的某個地方,或者在Windows服務中調用一些端點(始終在會話0中運行),並使服務精心製作屏幕截圖取自它的客戶端應用程序。

這是我會做,不是想一些「神奇」地告訴Vista和Windows 7開始,在到底是不是在系統啓動時尚未登錄的用戶的會話內部的服務的方式。

+0

任務計劃程序中的「開始登錄」任務也可以使用啓動文件夾。也許更好,因爲任務可以隱藏起來。 –