All pastes #84728 Raw Edit

Untitled

public text v1 · immutable
·published 2006-07-11 08:18 UTC
rendered paste body
using 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);
    }
}