none
console抓不到关闭事件 RRS feed

  • 問題


  •             AppDomain.CurrentDomain.DomainUnload;
                AppDomain.CurrentDomain.ProcessExit;
    抓不到console关闭事件


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.Threading;
    using System.Diagnostics;

    namespace test
    {
        public delegate bool ConsoleCtrlDelegate(int dwCtrlType);

        class Program
        {
            [DllImport("kernel32.dll")]
            private static extern bool SetConsoleCtrlHandler(ConsoleCtrlDelegate HandlerRoutine, bool Add);

             static void Main(string[] args)
            {
                  ....          
                Program cl = new Program();
            }

            public Program()
            {
                ConsoleCtrlDelegate newDategate = new ConsoleCtrlDelegate(HandlerRoutine);
                bool re = SetConsoleCtrlHandler(newDategate, true);
                if (re)
                {
                    Console.WriteLine("Set    SetConsoleCtrlHandler    success!!");
                }
                else
                {
                    Debug.WriteLine("Set    SetConsoleCtrlHandler    Error!!");
                    //OutputDebugString( "who close?");
                }
                Console.ReadLine();
            }

            bool HandlerRoutine(int CtrlType)
            {
                Thread.Sleep(5000);
                MessageBox.Show("关闭系统前请先确定已将其他控端关闭。\r\n否则会发生不可预期的错误", "NewDBServer-HandlerRoutine", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return false;
            }
        }
    }

    可以抓到ctrl + C可是抓不到滑鼠直接按X那个按钮
    而且没有办法直接显示讯息框,还要在按一次console才会显示messagebox。

    要如何才能抓到按X关闭的事件?
    而且能直接跑出messagebox?

    2009年3月19日 上午 08:55