rendered paste bodyusing System;
using System.Runtime.InteropServices;
class RegistryTester {
const int INFINITE = -1;
const long HKEY_LOCAL_MACHINE = 0x80000002L;
const long REG_NOTIFY_CHANGE_LAST_SET = 0x00000004L;
[DllImport("kernel32.dll", EntryPoint="CreateEvent")]
static extern IntPtr CreateEvent(IntPtr eventAttributes,
bool manualReset, bool initialState, String name);
[DllImport("advapi32.dll", EntryPoint="RegOpenKey")]
static extern IntPtr RegOpenKey(IntPtr key, String subKey,
out IntPtr resultSubKey);
[DllImport("advapi32.dll", EntryPoint="RegNotifyChangeKeyValue")]
static extern long RegNotifyChangeKeyValue(IntPtr key,
bool watchSubTree, int notifyFilter, IntPtr regEvent, bool
async);
[DllImport("kernel32.dll", EntryPoint="WaitForSingleObject")]
static extern long WaitForSingleObject(IntPtr handle, int timeOut);
[DllImport("kernel32.dll", EntryPoint="CloseHandle")]
static extern IntPtr CloseHandle(IntPtr handle);
public static void Main(String[] args) {
IntPtr myKey;
IntPtr myEvent = CreateEvent((IntPtr)null, false, false, null);
if (args.Length < 1) {
Console.WriteLine("Usage: RegistryTester KEY");
return;
}
String key = args[0];
unchecked {
RegOpenKey(new IntPtr((int)HKEY_LOCAL_MACHINE),
key, out myKey);
}
RegNotifyChangeKeyValue(myKey, true,
(int)REG_NOTIFY_CHANGE_LAST_SET, myEvent, true);
Console.WriteLine("Waiting on " + key + "...");
WaitForSingleObject(myEvent, INFINITE);
Console.WriteLine(key + " has been modified.");
CloseHandle(myEvent);
}
}