2009-11-17 50 views
0
static void Main() 
{   
    // Set the SystemEvents class to receive event notification when a user 
    // when display settings change. 
    SystemEvents.DisplaySettingsChanged += new 
     EventHandler(SystemEvents_DisplaySettingsChanged);   

    // For demonstration purposes, this application sits idle waiting for events. 
    Console.WriteLine("This application is waiting for system events."); 
    Console.WriteLine("Press <Enter> to terminate this application."); 
    Console.ReadLine(); 
} 

private void SystemEvents_DisplaySettingsChanged(object sender, EventArgs e) 
     { 
    Console.WriteLine("Display setting change ."); 

} 

我創建了一個窗口service.when我重新啓動系統並登錄,然後更改顯示設置將無法正常工作和事件不火,但該服務乳寧。如何可靠捕獲顯示設置改變

當我重新啓動服務,然後我改變顯示設置,然後顯示設置事件火災。

我認爲SystemEvents.DisplaySettingsChanged可能取決於某些服務。

回答

1

SystemEvents類使用依賴於終端服務服務(TermService)的封面下的WTSSession API。如果您的服務在啓動服務之前與SystemEvent混淆,它將以有趣的方式失敗。如果您的服務依賴於TermService,那麼SystemEvents init應該在服務啓動時運行。

+0

yes我已經完成了這個工作,我可以在第一次登錄時捕獲SystemEvents.SessionSwitch事件,如登錄,註銷,鎖定和解鎖,並且工作正常,但SystemEvents.DisplaySettingsChanged在我更改設置時不會觸發。 – 2009-11-17 10:05:09

+0

你在運行什麼操作系統?我相信服務會話0隔離將阻止它在任何比2003年更新的任何東西上可靠地工作。請參閱http://www.microsoft.com/whdc/system/vista/services.mspx – nitzmahone 2009-11-17 21:46:27