Csharp/C Sharp/Development Class/SystemEvent

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Demonstrates using the Microsoft.SystemEvents class to intercept an event generated by the system

<source lang="csharp"> /* C# Programming Tips & Techniques by Charles Wright, Kris Jamsa Publisher: Osborne/McGraw-Hill (December 28, 2001) ISBN: 0072193794

  • /

// // Event.cs -- Demonstrates using the Microsoft.SystemEvents class to intercept // an event generated by the system. // // Compile this program with the following command line: // C:>csc Event.cs // namespace nsEvent {

   using System;
   using System.Windows.Forms;
   using Microsoft.Win32;
   
   public class Event
   {
   //
   // Define the delegate
       public delegate void UserEventHandler (object obj, UserPreferenceChangedEventArgs args);
   //
   // Declare a variable that will hold the delegate
       static public event UserEventHandler ShowEvent;
       static public void Main ()
       {
   //
   // Create the delegate using the event handler (below)
             ShowEvent = new UserEventHandler (EvHandler);
   //
   // Creeate the event handler using the new operator
             UserPreferenceChangedEventHandler handler = new UserPreferenceChangedEventHandler(ShowEvent);
   //
   // Add the delegate to the system delegate list. This is a multi-cast delegate
   // and you must use the += operator to add the delegate. Use the -= operator
   // to remove the delegate
             SystemEvents.UserPreferenceChanged += handler;
   //
   // Show a message box to keep the program alive while you cause an event
             MessageBox.Show ("Hey! C Sharp", "System Events");
   //
   // Remove the delegate from the system delegate list
             SystemEvents.UserPreferenceChanged -= handler;
       }
   //
   // Declare and define the method that will be used as the event handler function
       static void EvHandler (object obj, UserPreferenceChangedEventArgs args)
       {
           /* Retrieve the category of the change */
           UserPreferenceCategory cat = args.Category;
           
           /* Build a string for the message box */
           string str = "User changed the " + cat.ToString() + " category";
           /*  Show the change event */
           MessageBox.Show (str, " event category");
       }
   }

}


      </source>


Hooking up to a Windows Callback

<source lang="csharp"> /* A Programmer"s Introduction to C# (Second Edition) by Eric Gunnerson Publisher: Apress L.P. ISBN: 1-893115-62-3

  • /

// 31 - Interop\Calling Native DLL Functions\Hooking up to a Windows Callback // copyright 2000 Eric Gunnerson using System; using System.Threading; using System.Runtime.InteropServices;

public class HookinguptoaWindowsCallback {

   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
   }

} public 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"t 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);

}

      </source>