Maison développement back-end Tutoriel C#.Net C# capture l'événement d'arrêt de Windows et exécute un exemple de code pour faire ce que vous voulez faire avant l'arrêt du système.

C# capture l'événement d'arrêt de Windows et exécute un exemple de code pour faire ce que vous voulez faire avant l'arrêt du système.

Mar 11, 2017 pm 01:41 PM

C# capture les événements d'arrêt de Windows et effectue certaines choses que vous souhaitez faire avant l'arrêt du système ;

Parfois, nous pouvons vouloir enregistrer ou traiter certaines choses lorsque Windows s'arrête. Voici plusieurs méthodes.

Première méthode :

        /// <summary>
        /// 窗口过程的回调函数
        /// </summary>
        /// <param name="m"></param>
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                //此消息在OnFormClosing之前
                case WindowsMessage.WM_QUERYENDSESSION:
                    //MessageBox.Show("WndProc.WM_QUERYENDSESSION.我要阻止系统关闭!");
                    //this.Close();
                    //this.Dispose();
                    //Application.Exit();
                    m.Result = (IntPtr)1; //阻止Windows注销、关机或重启
                    break;
                default:
                    break;
            }
            base.WndProc(ref m);
        }
Copier après la connexion

Méthode deux :

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            switch (e.CloseReason)
            {
                case CloseReason.ApplicationExitCall:
                    e.Cancel = true;
                    MessageBox.Show("拦截关闭要求事件!");
                    break;
                case CloseReason.FormOwnerClosing:
                    e.Cancel = true;
                    MessageBox.Show("拦截自身关闭事件!");
                    break;
                case CloseReason.MdiFormClosing:
                    e.Cancel = true;
                    MessageBox.Show("拦截MDI窗体关闭事件!");
                    break;
                case CloseReason.None:
                    break;
                case CloseReason.TaskManagerClosing:
                    e.Cancel = true;
                    MessageBox.Show("拦截任务管理器关闭事件!");
                    break;
                case CloseReason.UserClosing:
                    
                    //注销或关机会触发此事件;
                    //MessageBox.Show("拦截用户关闭事件!");
                    e.Cancel = false;
                    break;
                case CloseReason.WindowsShutDown:
                    e.Cancel = true;
                    MessageBox.Show("拦截关机事件!");
                    break;
                default:
                    break;
            }

            base.OnFormClosing(e);
        }
Copier après la connexion

Méthode trois :

//当用户试图注销或关闭系统时发生。  
            SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);

//下面是系统注销或关闭事件处理程序,  
        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类,这也是一个很有用的类,它提供了一组静态属性。
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Active Directory avec C# Active Directory avec C# Sep 03, 2024 pm 03:33 PM

Active Directory avec C#

Comment mettre à jour la dernière version de Bybit Exchange? Y aura-t-il un impact s'il n'est pas mis à jour? Comment mettre à jour la dernière version de Bybit Exchange? Y aura-t-il un impact s'il n'est pas mis à jour? Feb 21, 2025 pm 10:54 PM

Comment mettre à jour la dernière version de Bybit Exchange? Y aura-t-il un impact s'il n'est pas mis à jour?

Entrée de la version Web Deepseek Entrée du site officiel Deepseek Entrée de la version Web Deepseek Entrée du site officiel Deepseek Feb 19, 2025 pm 04:54 PM

Entrée de la version Web Deepseek Entrée du site officiel Deepseek

Générateur de nombres aléatoires en C# Générateur de nombres aléatoires en C# Sep 03, 2024 pm 03:34 PM

Générateur de nombres aléatoires en C#

Comment installer Deepseek Comment installer Deepseek Feb 19, 2025 pm 05:48 PM

Comment installer Deepseek

Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Mar 05, 2025 pm 05:57 PM

Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI?

Vue Grille de données C# Vue Grille de données C# Sep 03, 2024 pm 03:32 PM

Vue Grille de données C#

Modèles en C# Modèles en C# Sep 03, 2024 pm 03:33 PM

Modèles en C#

See all articles