如何可靠地捕获显示设置已更改

时间:2009-11-17 08:14:13

标签: c# windows visual-c++

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 .");

}

我已经创建了一个Windows服务。当我重新启动系统并登录然后更改显示设置时,它将无法工作,事件不会激活,但服务正在运行。

当我重新启动服务时,我更改了显示设置,然后显示设置事件触发。

我认为SystemEvents.DisplaySettingsChanged可能依赖于某些服务。

1 个答案:

答案 0 :(得分:1)

SystemEvents类使用WTSSession API,它依赖于终端服务服务(TermService)。如果您的服务在启动该服务之前与SystemEvents混淆,它将以有趣的方式失败。如果您的服务依赖于TermService,那么SystemEvents init应该在您的服务启动时运行。