2010-03-15 67 views
0

我們有一個每晚更新應用程序的進程,這需要關閉應用程序並重新備份(而不是要改變該進程)。Windows系統鎖定時的屏幕信息(.NET)

問題是,我們正在建立一個Windows AppBar啓動時需要一個有效的屏幕,並且當系統被鎖定時,Screen類中沒有一個。所以沒有啓用視覺效果,它顯示出真正的醜陋。

我們目前擁有的唯一方法是檢測鎖定的屏幕並旋轉並等待用戶解鎖桌面,然後繼續啓動。放棄它不是一種選擇,因爲這是我們用戶工作流程的關鍵部分,並且他們希望在前一天晚上如此離開它的時候能夠正常運行。

任何想法??我似乎無法找到任何地方顯示的信息,但它必須被存儲掉某處,因爲用戶在仍處於登錄

的Screen.AllScreens數組的內容:

**當鎖定:

Device Name : DISPLAY 
Primary  : True 
Bits Per Pixel : 0 
Bounds   : {X=-1280,Y=0,Width=2560,Height=1024} 
Working Area : {X=0,Y=0,Width=1280,Height=1024} 

**當解鎖:

Device Name : \\.\DISPLAY1 
Primary  : True 
Bits Per Pixel : 32 
Bounds   : {X=0,Y=0,Width=1280,Height=1024} 
Working Area : {X=0,Y=0,Width=1280,Height=994} 

Device Name : \\.\DISPLAY2 
Primary  : False 
Bits Per Pixel : 32 
Bounds   : {X=-1280,Y=0,Width=1280,Height=1024} 
Working Area : {X=-1280,Y=0,Width=1280,Height=964} 

回答

1

有這個不乾淨的解決方案,Windows不提供一種方法來檢測該工作站被鎖定,「錯誤」的桌面處於活動狀態。您只能檢測會話切換,示例代碼is here。爲了使這項工作,你幾乎被迫將這些代碼包含在應用程序中,並讓它留下一個麪包屑,以便它在啓動時可以回讀。確保在使用過一次後重置它,以便應用程序不會永久卡住。

0

此鎖屏問題取決於你使用的是什麼版本,無論是XP它採用GINA用於鎖定屏幕的d使用ContentProvider的Vista,這兩種機制都是最終造成的。

,看看屏幕被鎖定的唯一途徑,是一個屏幕踢,(這可以很容易地通過運行的PInvoke查詢查詢SystemsParameterInfo,以找出是否屏幕保護程序激活與否 - SPI_GETSCREENSAVERRUNNINGSPI_GETSCREENSAVESECURE確定這是否會觸發GINA或內容提供者)按WinKey + L在屏幕保護程序中啓動,在指定的時間段之後,如果沒有活動,則GINA或ContentProvider啓動並用屏幕保護程序替換屏幕保護程序鎖定屏幕...我已經包括兩個相關的鏈接,這裏發佈了有關Windows下的安全日誌信息...

0

這需要一點點工作,但你可以利用EnumDisplayDevices,EnumDisplaySettingsEx,MonitorFromPoint,GetMonitorInfo全部來自USER32和搶設備的屏幕截圖。

如果電腦被鎖定,或者如果有一個活動的屏幕保護程序,那麼屏幕捕捉總是一個米色。您可以檢查該情況以瞭解系統已鎖定。這適用於也被RDP加入的系統(例如,瘦客戶機到XP VDI。)

至少可以在我的環境中工作。代碼示例可以通過谷歌搜索找到。