科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道如何捕捉控制台程序的关闭事件

如何捕捉控制台程序的关闭事件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

如何捕捉控制台程序的关闭事件。最近要做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有WinForm的Closing或Closed事件,想想只能用API才捕捉消息来实现了,代码如下:

作者:中国IT实验室 来源:中国IT实验室 2007年9月11日

关键字: 编程

  • 评论
  • 分享微博
  • 分享邮件
  如何捕捉控制台程序的关闭事件。最近要做个控制台程序,在用户关闭程序的时候要做些处理,但控制台程序却没有WinForm的Closing或Closed事件,想想只能用API才捕捉消息来实现了,代码如下:


using System;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace ConsoleColsed
{

public delegate bool ConsoleCtrlDelegate(int dwCtrlType);

public class ClsMain

 [DllImport("kernel32.dll")]
 private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine,bool Add);
 //当用户关闭Console时,系统会发送次消息
 private const int CTRL_CLOSE_EVENT = 2;

 [stathread]
 static void Main()
 {
  ClsMain cls=new ClsMain();     
 }
 
 public ClsMain()
 {
  // 用API安装事件处理
  ConsoleCtrlDelegate newDelegate=new ConsoleCtrlDelegate(HandlerRoutine);
               bool bRet=SetConsoleCtrlHandler(newDelegate,true);
  if(bRet==false)  //安装事件处理失败
  {
   Debug.WriteLine("失败");
  }
  else
  {
   Console.WriteLine("ok");
   Console.Read();
  }
         }
   /**//// <summary>
   /// 处理消息的事件
   /// </summary>
   private static bool HandlerRoutine(int CtrlType)
   {
 switch(CtrlType)
 {
  case CTRL_CLOSE_EVENT:       //用户要关闭Console了
   Debug.WriteLine("Close");
   break;
 }

 return false;
    }
}
}

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章