Pergunta : detetar o ce das janelas da mudança do registro

Olá!, eu preciso de detetar quando os valores do registro mudam em Windows CE using vb.net. class= do

Resposta : detetar o ce das janelas da mudança do registro

Eu tive algum tempo para jogar com as funções.  Eu usei o emulador e trabalha muito bem naquele;)… Exemplo igualmente situado em 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 das importações
Importações System.Threading
Importações System.Runtime.InteropServices
Importações Microsoft.Win32

Classe pública RegistryNotification
    'egl1044

    'Construtor
    Novos secundários públicos ()

    Submarino da extremidade

     _
    Enum público RegNotifyFilter
        REG_NOTIFY_CHANGE_NAME = 1 'notificam o chamador se um subkey é adicionado ou suprimido.
        REG_NOTIFY_CHANGE_LAST_SET = 4 'notificam o chamador das mudanças a um valor da chave. Isto pode incluir a adição ou a supressão de um valor ou a mudança de um valor existente.
    Extremidade Enum

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

    'Não executado neste exemplo.
    ' _
    'Estrutura confidencial REG_NOTIFY_INFORMATION
    '    NextEntryOffset não ofuscante como o inteiro
    '    Ação não ofuscante como o inteiro
    '    RegNameLength não ofuscante como o inteiro
    '    RegName não ofuscante como IntPtr
    'Estrutura da extremidade

     _
    Função compartilhada confidencial CeFindCloseRegChange (hChangeHandle de ByVal como IntPtr) como o inteiro
    Função do fim

     _
    Função compartilhada confidencial CeFindFirstRegChange (hKey de ByVal como o bWatchSubtree de IntPtr, de ByVal como o dwNotifyFilter do inteiro, do ByVal como RegNotifyFilter) como IntPtr
    Função do fim

     _
    Função compartilhada confidencial CeFindNextRegChange (hChangeHandle de ByVal como IntPtr) como o inteiro
    Função do fim

     _
    Função compartilhada confidencial RegOpenKeyEx (hKey de ByVal como o lpSubKey de RegType, de ByVal como a corda, ulOptions como o inteiro, ByVal de ByVal samDesired como o inteiro, o phkResult de ByRef como IntPtr) como o inteiro
    Função do fim

     _
    Função compartilhada confidencial RegCloseKey (hKey de ByVal como IntPtr) como o inteiro
    Função do fim

     _
    Função compartilhada confidencial WaitForSingleObject (punho de ByVal como a Senhora de IntPtr, de ByVal como o inteiro) como o inteiro
    Função do fim

    hKey confidencial como IntPtr = IntPtr.Zero '/punho do registro
    hChangeHandle confidencial como IntPtr = IntPtr.Zero '/punho notificação do registro
    NotifyThread confidencial como a linha = nada
    bCancel confidencial como bôoleano = falso

    StartRegistryWatcher secundário público ()
        'Relógio para notificações em uma linha separada.
        bCancel = falso
        NotifyThread = linha nova (AddressOf RegistryNotificationThread)
        NotifyThread.IsBackground = retificam
        NotifyThread.Start ()
    Submarino da extremidade

    StopRegistryWatcher secundário público ()
        'Cancelar notificações na linha separada.
        o bCancel = retifica
        CeFindCloseRegChange (hChangeHandle)
    Submarino da extremidade

    '  <>
    RegistryNotificationThread secundário confidencial ()
        'Funcionar notificações da mudança na linha nova.
        RegisterRegistryChange (RegType.HKEY_LOCAL_MACHINE, “software \ fabrikan”, 0)
    Submarino da extremidade

    RegisterRegistryChange secundário confidencial (rootKey de ByVal como o keyName de RegType, de ByVal como o watchSubTree da corda, do ByVal como o inteiro)
        'Deteta notificações do registro.
        Se RegOpenKeyEx (rootKey, keyName, 0, 0, hKey) <> 0 então
            MsgBox (“RegOpenKeyEx failed.")
            Retorno
        Terminar se
        'TODO: /ajustes filtro da mudança aqui
        hChangeHandle = CeFindFirstRegChange (hKey, watchSubTree, RegNotifyFilter.REG_NOTIFY_CHANGE_LAST_SET)
        Se hChangeHandle.ToInt32 = -1 então
            MsgBox (“CeFindFirstRegChange falhou”)
            RegCloseKey (hKey)
            Retorno
        Terminar se
        Fazer quando bCancel <> verdadeiro
            WaitForSingleObject (hChangeHandle, Timeout.Infinite)
            MsgBox (“mudança detetada! ")
            CeFindNextRegChange (hChangeHandle)
            Thread.Sleep (0)
        Laço
        'TODO: /
        CeFindCloseRegChange (hChangeHandle)
        RegCloseKey (hKey)
    Submarino da extremidade

    DebugCreateRegistryEntry secundário público ()
        'Cria a chave especific no registro para a eliminação de erros.
        Rk não ofuscante como RegistryKey = Registry.LocalMachine.OpenSubKey (“software”, verdadeiros)
        rk.CreateSubKey (“fabrikan”)
        rk. Fechar ()
    Terminar o submarino

    DebugChangeRegistryValue secundário público ()
        'Simular uma mudança no registro para a eliminação de erros.
        Escurecer o rk como RegistryKey = Registry.LocalMachine.OpenSubKey (“software \ fabrikan”, verdadeiros)
        rk.SetValue (“fabrikans”, TimeOfDay.Second.ToString, RegistryValueKind.String)
        rk. Fechar ()
    Terminar o submarino

Terminar a classe
Outras soluções  
 
programming4us programming4us