Csharp/C Sharp/Development Class/SystemEvent
Demonstrates using the Microsoft.SystemEvents class to intercept an event generated by the system
/*
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");
}
}
}
Hooking up to a Windows Callback
/*
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);
}