


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 PMC# 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); }
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); }
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类,这也是一个很有用的类,它提供了一组静态属性。
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds

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

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

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