您现在的位置是:首页 >

netcore 3 桌面应用程序 使用.net下的系统事件增强应用程序

火烧 2022-01-23 11:35:17 1061
使用. et下的系统事件增强应用程序   一般情况下 在开发应用程序的时候都很少考虑一些系统部分的变化对应用程序带来影响 比如系统字体库里的字体增加或减少 用户注销或系统关机 桌面主题变换等等 针对应
netcore 3 桌面应用程序 使用.net下的系统事件增强应用程序

使用.net下的系统事件增强应用程序  

  一般情况下 在开发应用程序的时候都很少考虑一些系统部分的变化对应用程序带来影响 比如系统字体库里的字体增加或减少 用户注销或系统关机 桌面主题变换等等 针对应用程序的不同 或多或少会造成一些影响 比如程序在运行过程中没有退出就被用户注销 有可能造成数据丢失 系统字体的更改或系统时钟的更改对程序造成界面显示上或处理上的影响 如果需要程序有一定的健壮性 就需要在这些事件发生时做一些处理 幸运的是为实现这些功能我们不需要自己写一些繁杂的代码 FCL提供了一个类Microsoft Win SystemEvents来很好的完成这项任务 在看大师Charles Petzold著的《Microsoft C# Windows 程序设计》的时候发现这个类 想必许多人都已经用过了 不过还是决定自己写一些代码来体验一下     打开 NET Framework SDK 文档 查看SystemEvents的信息 它作为一个类提供了一些静态事件 我新建一个Windows 项目对一些事件进行了测试     在窗体构造函数中注册一堆静态事件     public Form ()    {    InitializeComponent();    //当用户更改显示设置时发生     SystemEvents DisplaySettingsChanged += new EventHandler(SystemEvents_DisplaySettingsChanged);    //在侦听系统事件的线程终止前发生 将在事件线程上调用委托     SystemEvents EventsThreadShutdown += new EventHandler(SystemEvents_EventsThreadShutdown);    //当用户在系统中添加或移除字体时发生     SystemEvents InstalledFontsChanged += new EventHandler(SystemEvents_InstalledFontsChanged);    //当系统用完可用 RAM 时发生     SystemEvents LowMemory += new EventHandler(SystemEvents_LowMemory);    //当用户切换到使用其他调色板的应用程序时发生     SystemEvents PaletteChanged += new EventHandler(SystemEvents_PaletteChanged);    //当用户挂起或继续系统时发生     SystemEvents PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);    //当用户注销或关闭系统时发生     SystemEvents SessionEnded += new SessionEndedEventHandler(SystemEvents_SessionEnded);    //当用户试图注销或关闭系统时发生     SystemEvents SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);    //当用户更改系统时钟上的时间时发生     SystemEvents TimeChanged += new EventHandler(SystemEvents_TimeChanged);    //在窗口计时器间隔过期时发生     SystemEvents TimerElapsed += new TimerElapsedEventHandler(SystemEvents_TimerElapsed);    //在用户首选项更改后发生     SystemEvents UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);    //当用户首选项更改时发生     SystemEvents UserPreferenceChanging += new UserPreferenceChangingEventHandler(SystemEvents_UserPreferenceChanging);    }    上面的代码很清楚也很简单 对其中几个事件处理程序的测试如下     private void SystemEvents_UserPreferenceChanging(object sender UserPreferenceChangingEventArgs e)    {    UserPreferenceCategory category = e Category;    MessageBox Show(category ToString());    }    UserPreferenceCategory是一个枚举类型 每一项值表示标识已更改的用户首选项区域 类型比较多 具体可以看MSDN文档 UserPreferenceChanged事件类似 使用UserPreferenceChangedEventArgs参数     下面是系统注销或关闭事件处理程序     private void SystemEvents_SessionEnding(object sender SessionEndingEventArgs e)    {    if(MessageBox Show(this 是否允许系统注销! 系统提示 MessageBoxButtons YesNo) != DialogResult Yes)    {    e Cancel = true;    }    else    {    e Cancel = false;    }    SessionEndReasons reason = e Reason;    switch(reason)    {    case SessionEndReasons Logoff:    MessageBox Show( 用户正在注销 操作系统继续运行 但启动此应用程序的用户正在注销 );    break;    case SessionEndReasons SystemShutdown:    MessageBox Show( 操作系统正在关闭 );    break;    }    }    如果把上面的事件处理程序修改成如下    private void SystemEvents_SessionEnding(object sender SessionEndingEventArgs e)    {    e Cancel = true;    }    那会出现什么情况 你点击开始菜单关机选择注销 关机 或重新启动将会失效 电脑不能正常关机了 进一步的话把程序做成Windows服务 人不知鬼不觉 晕 恶作剧?    SessionEnded事件同上 事件参数类为SessionEndedEventArgs 同SessionEndingEventArgs相比少了Cancel属性 Cancel属性同一些windows下的某些事件差不多 比如Form Closing事件 Control Validating事件     补充 如果需要获取应用程序需要的系统信息 可以访问System Windows Forms SystemInformation类 这也是一个很有用的类 它提供了一组静态属性 lishixinzhi/Article/program/Java/hx/201311/27060  
永远跟党走
  • 如果你觉得本站很棒,可以通过扫码支付打赏哦!

    • 微信收款码
    • 支付宝收款码