Cuestión : detectar el ce de las ventanas del cambio del registro

Hola, necesito detectar cuando los valores del registro cambian en Windows CE usar vb.net. class= del

Respuesta : detectar el ce de las ventanas del cambio del registro

Tenía cierto tiempo para jugar con las funciones.  Utilicé el emulador y trabaja muy bien en ése;)… Ejemplo también situado en MSDN @ CeFindFirstRegChange ()

1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
Sistema de las importaciones
Importaciones System.Threading
Importaciones System.Runtime.InteropServices
Importaciones Microsoft.Win32

Clase pública RegistryNotification
    'egl1044

    'Constructor
    Nuevos secundarios públicos ()

    Submarino del extremo

     _
    Enum público RegNotifyFilter
        REG_NOTIFY_CHANGE_NAME = 1 'notifican a llamador si se agrega o se suprime un subkey.
        REG_NOTIFY_CHANGE_LAST_SET = 4 'notifican a llamador de cambios a un valor de la llave. Esto puede incluir el adición o la supresión de un valor o el cambio de un valor existente.
    Extremo Enum

    Enum público RegType
        HKEY_LOCAL_MACHINE = &H80000002
        HKEY_CLASSES_ROOT = &H80000000
        HKEY_CURRENT_USER = &H80000001
        HKEY_USERS = &H80000003
    Extremo Enum

    'No ejecutado en este ejemplo.
    ' _
    'Estructura privada REG_NOTIFY_INFORMATION
    '    NextEntryOffset dévil como número entero
    '    Acción dévil como número entero
    '    RegNameLength dévil como número entero
    '    RegName dévil como IntPtr
    'Estructura del extremo

     _
    Función compartida privada CeFindCloseRegChange (hChangeHandle de ByVal como IntPtr) como número entero
    Función del final

     _
    Función compartida privada CeFindFirstRegChange (hKey de ByVal como bWatchSubtree de IntPtr, de ByVal como dwNotifyFilter del número entero, de ByVal como RegNotifyFilter) como IntPtr
    Función del final

     _
    Función compartida privada CeFindNextRegChange (hChangeHandle de ByVal como IntPtr) como número entero
    Función del final

     _
    Función compartida privada RegOpenKeyEx (hKey de ByVal como el lpSubKey de RegType, de ByVal como la secuencia, ulOptions como número entero, ByVal de ByVal samDesired como número entero, phkResult de ByRef como IntPtr) como número entero
    Función del final

     _
    Función compartida privada RegCloseKey (hKey de ByVal como IntPtr) como número entero
    Función del final

     _
    Función compartida privada WaitForSingleObject (manija de ByVal como ms de IntPtr, de ByVal como número entero) como número entero
    Función del final

    hKey privado como IntPtr = IntPtr.Zero '/manija del registro
    hChangeHandle privado como IntPtr = IntPtr.Zero '/manija de la notificación del registro
    NotifyThread privado como hilo de rosca = nada
    bCancel privado como boleano = falso

    StartRegistryWatcher secundario público ()
        'Reloj para las notificaciones en un hilo de rosca separado.
        bCancel = falso
        NotifyThread = nuevo hilo de rosca (AddressOf RegistryNotificationThread)
        NotifyThread.IsBackground = verdad
        NotifyThread.Start ()
    Submarino del extremo

    StopRegistryWatcher secundario público ()
        'Cancelar las notificaciones en el hilo de rosca separado.
        el bCancel = verdad
        CeFindCloseRegChange (hChangeHandle)
    Submarino del extremo

    '  <>
    RegistryNotificationThread secundario privado ()
        'Funcionar las notificaciones del cambio en el nuevo hilo de rosca.
        RegisterRegistryChange (RegType.HKEY_LOCAL_MACHINE, “software \ fabrikan”, 0)
    Submarino del extremo

    RegisterRegistryChange secundario privado (rootKey de ByVal como keyName de RegType, de ByVal como watchSubTree de la secuencia, de ByVal como número entero)
        'Detecta notificaciones del registro.
        Si RegOpenKeyEx (rootKey, keyName, 0, 0, hKey) <> 0 entonces
            MsgBox (“RegOpenKeyEx failed.")
            Vuelta
        Terminar si
        'TODO: /ajustes del filtro del cambio aquí
        hChangeHandle = CeFindFirstRegChange (hKey, watchSubTree, RegNotifyFilter.REG_NOTIFY_CHANGE_LAST_SET)
        Si hChangeHandle.ToInt32 = -1 entonces
            MsgBox (“CeFindFirstRegChange falló”)
            RegCloseKey (hKey)
            Vuelta
        Terminar si
        Hacer mientras que bCancel <> verdad
            WaitForSingleObject (hChangeHandle, Timeout.Infinite)
            ¡MsgBox (“cambio detectado! ")
            CeFindNextRegChange (hChangeHandle)
            Thread.Sleep (0)
        Lazo
        'TODO: /
        CeFindCloseRegChange (hChangeHandle)
        RegCloseKey (hKey)
    Submarino del extremo

    DebugCreateRegistryEntry secundario público ()
        'Crea la llave especificada en el registro para el depuración.
        Rk dévil como RegistryKey = Registry.LocalMachine.OpenSubKey (“software”, verdades)
        rk.CreateSubKey (“fabrikan”)
        rk. Cerrarse ()
    Terminar el submarino

    DebugChangeRegistryValue secundario público ()
        'Simular un cambio en el registro para el depuración.
        Amortiguar el rk como RegistryKey = Registry.LocalMachine.OpenSubKey (“software \ fabrikan”, verdades)
        rk.SetValue (“fabrikans”, TimeOfDay.Second.ToString, RegistryValueKind.String)
        rk. Cerrarse ()
    Terminar el submarino

Terminar la clase
Otras soluciones  
 
programming4us programming4us