Csharp/C Sharp/Development Class/SystemEvent
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>