Hooking up to a Windows Callback : Windows Callback : Windows C# Examples


C# Examples » Windows » Windows Callback »

 

Hooking up to a Windows Callback









    
//  Code  from  
//  A  Programmer's  Introduction  to  C#  2.0,  Third  Edition
//  copyright  2000  Eric  Gunnerson


using  System;
using  System.Threading;
using  System.Runtime.InteropServices;

class  ConsoleCtrl
{
        public  enum  ConsoleEvent
        {
                CTRL_C  =  0,                //  From  wincom.h
                CTRL_BREAK  =  1,
                CTRL_CLOSE  =  2,
                CTRL_LOGOFF  =  5,
                CTRL_SHUTDOWN  =  6
        }
        
        public  delegate  void  ControlEventHandler(ConsoleEvent  consoleEvent);
        
        public  event  ControlEventHandler  ControlEvent;
        
        //  save  delegate  so  the  GC  doesn?collect  it.
        ControlEventHandler  eventHandler;
        
        public  ConsoleCtrl()
        {
                //  save  this  to  a  private  var  so  the  GC  doesn't  collect  it
                eventHandler  =  new  ControlEventHandler(Handler);
                SetConsoleCtrlHandler(eventHandler,  true);
        }
        
        private  void  Handler(ConsoleEvent  consoleEvent)
        {
                if  (ControlEvent  !=  null)
                ControlEvent(consoleEvent);
        }
        
        [DllImport("kernel32.dll")]
        static  extern  bool  SetConsoleCtrlHandler(ControlEventHandler  e,  bool  add);
}

class  MainClass
{
        public  static  void  MyHandler(ConsoleCtrl.ConsoleEvent  consoleEvent)
        {
                Console.WriteLine("Event:  {0}",  consoleEvent);
        }
        
        public  static  void  Main()
        {
                ConsoleCtrl  cc  =  new  ConsoleCtrl();
                cc.ControlEvent  +=  new  ConsoleCtrl.ControlEventHandler(MyHandler);
                
                Console.WriteLine("Enter  'E'  to  exit");                
                
                Thread.Sleep(15000);    //  sleep  15  seconds
        }
}
    
   
  
   



Output

Enter 'E' to exit
Event: CTRL_C
Terminate batch job (Y/N)?
Terminate batch job (Y/N)? n


HTML code for linking to this page:

Follow Navioo On Twitter

C# Examples

 Navioo Windows
» Windows Callback