Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Ediraser - Registro.bas

Registro.bas

Caricato da: Natamas
Scarica il programma completo

  1. Attribute VB_Name = "RegistroSistema"
  2. '------------------------------------------------------------------
  3. ' Modulo    : modRegistroSistema
  4. ' DataOra   : 07/06/2003 14.50
  5. ' Autore    : Giuseppe Cazzato
  6. ' Scopo     : Permettere l'accesso alle chiavi del registro
  7. '------------------------------------------------------------------
  8. Option Explicit
  9.  
  10. Private Const HKEY_CLASSES_ROOT = &H80000000
  11. Private Const HKEY_CURRENT_USER = &H80000001
  12. Private Const HKEY_LOCAL_MACHINE = &H80000002
  13. Private Const HKEY_USERS = &H80000003
  14. Private Const HKEY_PERFORMANCE_DATA = &H80000004
  15. Private Const HKEY_CURRENT_CONFIG = &H80000005
  16. Private Const HKEY_DYN_DATA = &H80000006
  17.  
  18. Private Const REG_OPTION_NON_VOLATILE = 0&
  19.  
  20. Private Const KEY_QUERY_VALUE = &H1
  21. Private Const KEY_SET_VALUE = &H2
  22. Private Const KEY_CREATE_SUB_KEY = &H4
  23. Private Const KEY_ENUMERATE_SUB_KEYS = &H8
  24. Private Const KEY_NOTIFY = &H10
  25. Private Const KEY_CREATE_LINK = &H20
  26. Private Const KEY_ALL_ACCESS = &H3F
  27.  
  28. Private Const ERROR_SUCCESS = 0&
  29. Private Const ERROR_MORE_DATA = 234&
  30. Private Const ERROR_NO_MORE_ITEMS = 259&
  31.  
  32. Private Const REG_SZ = 1&
  33. Private Const REG_EXPAND_SZ = 2&
  34. Private Const REG_BINARY = 3&
  35. Private Const REG_DWORD = 4&
  36.  
  37. Private Const SE_BACKUP_NAME = "SeBackupPrivilege"
  38.  
  39. Private Type FILETIME
  40.    dwLowDateTime As Long
  41.    dwHighDateTime As Long
  42. End Type
  43.  
  44. Private Declare Function GetWindowsDirectory _
  45.    Lib "kernel32" Alias "GetWindowsDirectoryA" _
  46.    (ByVal lpBuffer As String, ByVal nSize As Long) As Long
  47.  
  48. Private Declare Function RegCreateKeyEx _
  49.       Lib "advapi32.dll" Alias "RegCreateKeyExA" _
  50.       (ByVal hKey As Long, _
  51.       ByVal lpSubKey As String, _
  52.       ByVal Reserved As Long, _
  53.       ByVal lpClass As String, _
  54.       ByVal dwOptions As Long, _
  55.       ByVal samDesired As Long, _
  56.       lpSecurityAttributes As Long, _
  57.       phkResult As Long, _
  58.       lpdwDisposition As Long) As Long
  59.  
  60. Private Declare Function RegDeleteKey _
  61.       Lib "advapi32.dll" Alias "RegDeleteKeyA" _
  62.       (ByVal hKey As Long, _
  63.       ByVal lpSubKey As String) As Long
  64.  
  65. Private Declare Function RegOpenKeyEx _
  66.       Lib "advapi32.dll" Alias "RegOpenKeyExA" _
  67.       (ByVal hKey As Long, _
  68.       ByVal lpSubKey As String, _
  69.       ByVal ulOptions As Long, _
  70.       ByVal samDesired As Long, _
  71.       phkResult As Long) As Long
  72.  
  73. Private Declare Function RegCloseKey _
  74.       Lib "advapi32.dll" _
  75.       (ByVal hKey As Long) As Long
  76.  
  77. Private Declare Function RegQueryValueEx _
  78.       Lib "advapi32.dll" Alias "RegQueryValueExA" _
  79.       (ByVal hKey As Long, _
  80.       ByVal lpValueName As String, _
  81.       ByVal lpReserved As Long, _
  82.       lpType As Long, _
  83.       lpData As Any, _
  84.       lpcbData As Long) As Long
  85.       'Note that if you declare the lpData parameter as String, you must pass it ByVal.
  86.  
  87. Private Declare Function RegSetValueEx _
  88.       Lib "advapi32.dll" Alias "RegSetValueExA" _
  89.       (ByVal hKey As Long, _
  90.       ByVal lpValueName As String, _
  91.       ByVal Reserved As Long, _
  92.       ByVal dwType As Long, _
  93.       lpData As Any, _
  94.       ByVal cbData As Long) As Long
  95.       'Note that if you declare the lpData parameter as String, you must pass it ByVal.
  96.  
  97. Private Declare Function RegEnumKeyEx _
  98.       Lib "advapi32.dll" Alias "RegEnumKeyExA" _
  99.       (ByVal hKey As Long, _
  100.       ByVal dwIndex As Long, _
  101.       ByVal lpName As String, _
  102.       lpcbName As Long, _
  103.       ByVal lpReserved As Long, _
  104.       ByVal lpClass As String, _
  105.       lpcbClass As Long, _
  106.       lpftLastWriteTime As FILETIME) As Long
  107.  
  108. Private Declare Function RegDeleteValue _
  109.       Lib "advapi32.dll" Alias "RegDeleteValueA" _
  110.       (ByVal hKey As Long, _
  111.       ByVal lpValueName As String) As Long
  112.      
  113. Private Declare Function RegEnumValue _
  114.       Lib "advapi32.dll" Alias "RegEnumValueA" _
  115.       (ByVal hKey As Long, _
  116.       ByVal dwIndex As Long, _
  117.       ByVal lpValueName As String, _
  118.       lpcbValueName As Long, _
  119.       ByVal lpReserved As Long, _
  120.       lpType As Long, _
  121.       lpData As Any, _
  122.       lpcbData As Long) As Long
  123.  
  124. '------------------------------------------------------------------
  125. ' Procedura : TrovaBase
  126. ' DataOra   : 07/06/2003 14.52
  127. ' Autore    : Giuseppe Cazzato
  128. ' Scopo     : Restituisce il codice relativo al ramo principale della chiave
  129. '------------------------------------------------------------------
  130. Private Function TrovaBase(ByRef sNome As String) As Long
  131.  
  132.    Dim sBase As String
  133.    Dim lPos As Long
  134.  
  135.    lPos = InStr(sNome, "\")
  136.    If lPos > 0 Then
  137.       sBase = UCase$(Left$(sNome, lPos - 1))
  138.       sNome = Mid$(sNome, lPos + 1)
  139.    Else
  140.       sBase = sNome
  141.       sNome = ""
  142.    End If
  143.    Select Case sBase
  144.       Case "HKEY_CLASSES_ROOT": TrovaBase = HKEY_CLASSES_ROOT
  145.       Case "HKEY_CURRENT_USER": TrovaBase = HKEY_CURRENT_USER
  146.       Case "HKEY_LOCAL_MACHINE": TrovaBase = HKEY_LOCAL_MACHINE
  147.       Case "HKEY_USERS": TrovaBase = HKEY_USERS
  148.       Case "HKEY_PERFORMANCE_DATA": TrovaBase = HKEY_PERFORMANCE_DATA
  149.       Case "HKEY_CURRENT_CONFIG": TrovaBase = HKEY_CURRENT_CONFIG
  150.       Case "HKEY_DYN_DATA": TrovaBase = HKEY_DYN_DATA
  151.       Case Else: TrovaBase = &H88888888   'Valore non valido
  152.    End Select
  153.  
  154. End Function
  155.  
  156. '------------------------------------------------------------------
  157. ' Procedura : CreaChiave
  158. ' DataOra   : 07/06/2003 14.53
  159. ' Autore    : Giuseppe Cazzato
  160. ' Scopo     : Creare una nuova chiave
  161. '------------------------------------------------------------------
  162. Public Function CreaChiave(ByVal sNome As String) As Boolean
  163.  
  164.    Dim lChiave As Long
  165.    Dim lBase As Long
  166.    Dim lRis As Long
  167.  
  168.    lBase = TrovaBase(sNome)
  169.    CreaChiave = (RegCreateKeyEx(lBase, sNome, 0&, vbNullString, _
  170.       REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE, ByVal 0&, lChiave, _
  171.       lRis) = ERROR_SUCCESS)
  172.    If CreaChiave Then CreaChiave = ChiudiChiave(lChiave)
  173.  
  174. End Function
  175.  
  176. '------------------------------------------------------------------
  177. ' Procedura : CancellaChiave
  178. ' DataOra   : 07/06/2003 15.01
  179. ' Autore    : Giuseppe Cazzato
  180. ' Scopo     : Elimina una chiave
  181. '------------------------------------------------------------------
  182. Public Function CancellaChiave(ByVal sNome As String) As Boolean
  183.  
  184.    Dim lBase As Long
  185.  
  186.    lBase = TrovaBase(sNome)
  187.    CancellaChiave = (RegDeleteKey(lBase, sNome) = ERROR_SUCCESS)
  188.  
  189. End Function
  190.  
  191. '------------------------------------------------------------------
  192. ' Procedura : ApriChiave
  193. ' DataOra   : 07/06/2003 15.05
  194. ' Autore    : Giuseppe Cazzato
  195. ' Scopo     : Apre una chiave e restituisce il suo handle
  196. '------------------------------------------------------------------
  197. Public Function ApriChiave(ByVal sNome As String, _
  198.    ByRef hChiave As Long, ByVal lAccesso As Long) As Boolean
  199.  
  200.    Dim lBase As Long
  201.  
  202.    lBase = TrovaBase(sNome)
  203.    ApriChiave = (RegOpenKeyEx(lBase, sNome, 0&, lAccesso, hChiave) = ERROR_SUCCESS)
  204.  
  205. End Function
  206.  
  207. '------------------------------------------------------------------
  208. ' Procedura : ChiudiChiave
  209. ' DataOra   : 07/06/2003 15.14
  210. ' Autore    : Giuseppe Cazzato
  211. ' Scopo     : Chiude una chiave dato l'handle
  212. '------------------------------------------------------------------
  213. Public Function ChiudiChiave(ByVal hChiave As Long) As Boolean
  214.  
  215.    ChiudiChiave = (RegCloseKey(hChiave) = ERROR_SUCCESS)
  216.  
  217. End Function
  218.  
  219. '------------------------------------------------------------------
  220. ' Procedura : EnumeraSottoChiavi
  221. ' DataOra   : 07/06/2003 20.03
  222. ' Autore    : Giuseppe Cazzato
  223. ' Scopo     : Elenca le sottochiavi di una chiave
  224. '------------------------------------------------------------------
  225. Public Function EnumeraSottoChiavi(ByVal sChiave As String, ByVal lIndice As Long, _
  226.    ByRef sSubChiave As String) As Boolean
  227.  
  228.    Dim hChiave As Long
  229.    Dim lNumCar As Long
  230.    Dim uData As FILETIME
  231.    Dim lRet As Long
  232.  
  233.    EnumeraSottoChiavi = False
  234.    If ApriChiave(sChiave, hChiave, KEY_ENUMERATE_SUB_KEYS Or KEY_QUERY_VALUE) Then
  235.       sSubChiave = Space$(10000)
  236.       lNumCar = 10000
  237.       lRet = RegEnumKeyEx(hChiave, lIndice, sSubChiave, lNumCar, 0&, 0&, 0&, uData)
  238.       If lRet = ERROR_MORE_DATA Then
  239.          sSubChiave = Left$(sSubChiave, lNumCar)
  240.          EnumeraSottoChiavi = True
  241.       End If
  242.       EnumeraSottoChiavi = (lRet <> ERROR_NO_MORE_ITEMS)
  243.       ChiudiChiave hChiave
  244.    End If
  245.  
  246. End Function
  247.  
  248. '------------------------------------------------------------------
  249. ' Procedura : LeggiChiaveStringa
  250. ' DataOra   : 07/06/2003 15.15
  251. ' Autore    : Giuseppe Cazzato
  252. ' Scopo     : Legge una stringa dalla chiave specificata,
  253. '             se non ci riesce restituisce il valore di dafault
  254. '------------------------------------------------------------------
  255. Public Function LeggiChiaveStringa(ByVal sChiave As String, ByVal sNome As String, _
  256.    ByRef sValore As String, Optional ByVal sDefault As String = "") As Boolean
  257.  
  258.    Dim hChiave As Long
  259.    Dim lDimensione As Long
  260.    Dim lTipo As Long
  261.  
  262.    LeggiChiaveStringa = False
  263.    If ApriChiave(sChiave, hChiave, KEY_QUERY_VALUE) Then
  264.       If (RegQueryValueEx(hChiave, sNome, 0&, lTipo, ByVal 0&, _
  265.          lDimensione) = ERROR_SUCCESS) And (lTipo = REG_SZ) Then
  266.          sValore = Space$(lDimensione)
  267.          If RegQueryValueEx(hChiave, sNome, 0&, ByVal 0&, ByVal sValore, _
  268.             lDimensione) = ERROR_SUCCESS Then
  269.             If lDimensione > 0 Then sValore = Left$(sValore, lDimensione - 1)
  270.             LeggiChiaveStringa = True
  271.          End If
  272.       End If
  273.       ChiudiChiave hChiave
  274.    End If
  275.    If Not LeggiChiaveStringa Then sValore = sDefault
  276.  
  277. End Function
  278.  
  279. '------------------------------------------------------------------
  280. ' Procedura : LeggiChiaveBinario
  281. ' DataOra   : 07/06/2003 19.24
  282. ' Autore    : Giuseppe Cazzato
  283. ' Scopo     : Legge un valore binario dalla chiave specificata,
  284. '             se non ci riesce restituisce il valore di dafault.
  285. '             Qualsiasi chiave, anche di tipo non binario, può
  286. '             essere letta come binario.
  287. '------------------------------------------------------------------
  288. Public Function LeggiChiaveBinario(ByVal sChiave As String, ByVal sNome As String, _
  289.    ByRef byValore() As Byte) As Boolean
  290.  
  291.    Dim hChiave As Long
  292.    Dim lDimensione As Long
  293.    Dim lTipo As Long
  294.  
  295.    LeggiChiaveBinario = False
  296.    If ApriChiave(sChiave, hChiave, KEY_QUERY_VALUE) Then
  297.       If (RegQueryValueEx(hChiave, sNome, 0&, lTipo, ByVal 0&, _
  298.          lDimensione) = ERROR_SUCCESS) Then
  299.          ReDim byValore(0 To lDimensione - 1)
  300.          LeggiChiaveBinario = (RegQueryValueEx(hChiave, sNome, 0&, ByVal 0&, _
  301.             byValore(0), lDimensione) = ERROR_SUCCESS)
  302.       End If
  303.       ChiudiChiave hChiave
  304.    End If
  305.  
  306. End Function
  307.  
  308. '------------------------------------------------------------------
  309. ' Procedura : LeggiChiaveNumero
  310. ' DataOra   : 07/06/2003 19.37
  311. ' Autore    : Giuseppe Cazzato
  312. ' Scopo     : Legge un numero dalla chiave specificata,
  313. '             se non ci riesce restituisce il valore di dafault
  314. '------------------------------------------------------------------
  315. Public Function LeggiChiaveNumero(ByVal sChiave As String, ByVal sNome As String, _
  316.    ByRef lValore As Long, Optional ByVal lDefault As Long = 0) As Boolean
  317.  
  318.    Dim hChiave As Long
  319.    Dim lTipo As Long
  320.  
  321.    LeggiChiaveNumero = False
  322.    If ApriChiave(sChiave, hChiave, KEY_QUERY_VALUE) Then
  323.       LeggiChiaveNumero = ((RegQueryValueEx(hChiave, sNome, 0&, _
  324.          lTipo, lValore, 4) = ERROR_SUCCESS) And (lTipo = REG_DWORD))
  325.       ChiudiChiave hChiave
  326.    End If
  327.    If Not LeggiChiaveNumero Then lValore = lDefault
  328.  
  329. End Function
  330.  
  331. '------------------------------------------------------------------
  332. ' Procedura : LeggiChiaveBooleano
  333. ' DataOra   : 07/06/2003 19.38
  334. ' Autore    : Giuseppe Cazzato
  335. ' Scopo     : Legge un valore vero/falso dalla chiave specificata,
  336. '             se non ci riesce restituisce il valore di dafault
  337. '------------------------------------------------------------------
  338. Public Function LeggiChiaveBooleano(ByVal sChiave As String, ByVal sNome As String, _
  339.    ByRef bValore As Boolean, Optional ByVal bDefault As Boolean = False) As Boolean
  340.  
  341.    Dim lRet As Long
  342.  
  343.    LeggiChiaveBooleano = LeggiChiaveNumero(sChiave, sNome, lRet, IIf(bDefault, 1, 0))
  344.    bValore = (lRet <> 0)
  345.  
  346. End Function
  347.  
  348. '------------------------------------------------------------------
  349. ' Procedura : ScriviChiaveStringa
  350. ' DataOra   : 07/06/2003 19.40
  351. ' Autore    : Giuseppe Cazzato
  352. ' Scopo     : Scrive una stringa nella chiave se il suo valore è diverso
  353. '             da quello di default, altrimenti cancella la stringa dalla chiave
  354. '------------------------------------------------------------------
  355. Public Function ScriviChiaveStringa(ByVal sChiave As String, ByVal sNome As String, _
  356.    ByVal sValore As String, Optional ByVal sDefault As String = "") As Boolean
  357.  
  358.    Dim hChiave As Long
  359.  
  360.    ScriviChiaveStringa = False
  361.    If ApriChiave(sChiave, hChiave, KEY_SET_VALUE) Then
  362.       If sValore <> sDefault Then
  363.          ScriviChiaveStringa = (RegSetValueEx(hChiave, sNome, 0&, REG_SZ, _
  364.             ByVal sValore, LenB(StrConv(sValore, vbFromUnicode)) + 1) = ERROR_SUCCESS)
  365.       Else
  366.          ScriviChiaveStringa = CancellaValore(hChiave, sNome)
  367.       End If
  368.       ChiudiChiave hChiave
  369.    End If
  370.  
  371. End Function
  372.  
  373. '------------------------------------------------------------------
  374. ' Procedura : ScriviChiaveBinario
  375. ' DataOra   : 07/06/2003 19.56
  376. ' Autore    : Giuseppe Cazzato
  377. ' Scopo     : Scrive un valore binario nella chiave
  378. '------------------------------------------------------------------
  379. Public Function ScriviChiaveBinario(ByVal sChiave As String, ByVal sNome As String, _
  380.    ByRef byValore() As Byte) As Boolean
  381.  
  382.    Dim hChiave As Long
  383.    Dim lDimensione As Long
  384.  
  385.    ScriviChiaveBinario = False
  386.    If ApriChiave(sChiave, hChiave, KEY_SET_VALUE) Then
  387.       lDimensione = UBound(byValore) - LBound(byValore) + 1
  388.       ScriviChiaveBinario = (RegSetValueEx(hChiave, sNome, 0&, _
  389.          REG_BINARY, byValore(0), lDimensione) = ERROR_SUCCESS)
  390.       ChiudiChiave hChiave
  391.    End If
  392.  
  393. End Function
  394.  
  395. '------------------------------------------------------------------
  396. ' Procedura : ScriviChiaveNumero
  397. ' DataOra   : 07/06/2003 19.57
  398. ' Autore    : Giuseppe Cazzato
  399. ' Scopo     : Scrive un numero nella chiave se il suo valore è diverso
  400. '             da quello di default, altrimenti cancella il numero dalla chiave
  401. '------------------------------------------------------------------
  402. Public Function ScriviChiaveNumero(ByVal sChiave As String, ByVal sNome As String, _
  403.    ByVal lValore As Long, Optional ByVal lDefault As Long = 0) As Boolean
  404.  
  405.    Dim hChiave As Long
  406.  
  407.    ScriviChiaveNumero = False
  408.    If ApriChiave(sChiave, hChiave, KEY_SET_VALUE) Then
  409.       If lValore <> lDefault Then
  410.          ScriviChiaveNumero = (RegSetValueEx(hChiave, sNome, 0&, _
  411.             REG_DWORD, lValore, 4) = ERROR_SUCCESS)
  412.       Else
  413.          ScriviChiaveNumero = CancellaValore(hChiave, sNome)
  414.       End If
  415.       ChiudiChiave hChiave
  416.    End If
  417.  
  418. End Function
  419.  
  420. '------------------------------------------------------------------
  421. ' Procedura : ScriviChiaveBooleano
  422. ' DataOra   : 07/06/2003 19.58
  423. ' Autore    : Giuseppe Cazzato
  424. ' Scopo     : 'Scrive un valore vero/falso nella chiave se il suo valore è
  425. '             diverso da quello di default, altrimenti cancella il valore dalla chiave
  426. '------------------------------------------------------------------
  427. Public Function ScriviChiaveBooleano(ByVal sChiave As String, ByVal sNome As String, _
  428.    ByVal bValore As Boolean, Optional ByVal bDefault As Boolean = False) As Boolean
  429.  
  430.    ScriviChiaveBooleano = ScriviChiaveNumero(sChiave, sNome, _
  431.       IIf(bValore, 1, 0), IIf(bDefault, 1, 0))
  432.  
  433. End Function
  434.  
  435. '------------------------------------------------------------------
  436. ' Procedura : CancellaValore
  437. ' DataOra   : 07/06/2003 19.46
  438. ' Autore    : Giuseppe Cazzato
  439. ' Scopo     : Cancella un valore (stringa o numero) da una chiave
  440. '------------------------------------------------------------------
  441. Private Function CancellaValore(ByVal hChiave As Long, _
  442.    ByVal sNome As String) As Boolean
  443.  
  444.    CancellaValore = (RegDeleteValue(hChiave, sNome) = ERROR_SUCCESS)
  445.  
  446. End Function
  447.  
  448. Public Function EnumeraValori(ByVal sChiave As String, ByVal lIndice As Long, _
  449.    ByRef sNome As String, ByRef lTipo As Long) As Boolean
  450.  
  451.    Dim hChiave As Long
  452.    Dim lNumCar As Long
  453.    Dim lRet As Long
  454.  
  455.    EnumeraValori = False
  456.    If ApriChiave(sChiave, hChiave, KEY_QUERY_VALUE) Then
  457.       sNome = Space$(10000)
  458.       lNumCar = 10000
  459.       lRet = RegEnumValue(hChiave, lIndice, sNome, _
  460.          lNumCar, 0&, lTipo, ByVal 0&, ByVal 0&)
  461.       If lRet = ERROR_SUCCESS Then
  462.          sNome = Left$(sNome, lNumCar)
  463.          EnumeraValori = (lRet <> ERROR_NO_MORE_ITEMS)
  464.       End If
  465.       ChiudiChiave hChiave
  466.    End If
  467.  
  468. End Function
  469.  
  470. '------------------------------------------------------------------
  471. ' Procedura : SalvaChiave
  472. ' DataOra   : 08/06/2003 18.11
  473. ' Autore    : Giuseppe Cazzato
  474. ' Scopo     : Salvare il contenuto di una chiave in un file .reg
  475. ' Note      : Se bAppend è True le informazioni verranno aggiunte
  476. '             al file, altrimenti questo verrà sovrascritto
  477. '------------------------------------------------------------------
  478. Public Function SalvaChiave(ByVal sNomeChiave As String, _
  479.    ByVal sNomeFile As String, Optional ByVal bAppend As Boolean = False) As Boolean
  480.  
  481.    Dim sRegEdit As String
  482.    Dim lCar As Long
  483.  
  484.    sRegEdit = Space$(256)
  485.    lCar = GetWindowsDirectory(sRegEdit, Len(sRegEdit))
  486.    sRegEdit = Left$(sRegEdit, lCar) & "\regedit.exe /save "
  487.    If Not bAppend Then
  488.       Shell sRegEdit & """" & sNomeFile & """ """ & sNomeChiave & """"
  489.    Else
  490.       Shell sRegEdit & """" & App.Path & "\tmppmt.reg"" """ & sNomeChiave & """"
  491.       UnisciReg sNomeFile, App.Path & "\tmppmt.reg"
  492.       Kill App.Path & "\tmppmt.reg"
  493.    End If
  494.  
  495. End Function
  496.  
  497. '------------------------------------------------------------------
  498. ' Procedura : ImportaReg
  499. ' DataOra   : 08/06/2003 18.11
  500. ' Autore    : Giuseppe Cazzato
  501. ' Scopo     : Importare il contenuto di una file .reg nel registro
  502. '------------------------------------------------------------------
  503. Public Function ImportaReg(ByVal sNomeFile As String) As Boolean
  504.  
  505.    Dim sPath As String
  506.  
  507.    sPath = Space$(256)
  508.    GetWindowsDirectory sPath, Len(sPath)
  509.    Shell sPath & "\regedit.exe """ & sNomeFile & """"
  510.      
  511. End Function
  512.  
  513. '------------------------------------------------------------------
  514. ' Procedura : UnisciReg
  515. ' DataOra   : 12/07/2003 21.38
  516. ' Autore    : Giuseppe Cazzato
  517. ' Scopo     : Aggiunge un file reg ad un'altro
  518. '------------------------------------------------------------------
  519. Private Sub UnisciReg(ByVal sOutputFile As String, ByVal sInputFile As String)
  520.  
  521.    Dim lFileInput As Long
  522.    Dim lFileOutput As Long
  523.    Dim sTmp As String
  524.    Dim bUnicode As Boolean
  525.  
  526.    On Error GoTo UnisciReg_Errore
  527.  
  528.    bUnicode = UnicodeFile(sOutputFile)
  529.    lFileInput = FreeFile
  530.    Open sInputFile For Input As lFileInput
  531.    lFileOutput = FreeFile
  532.    Open sOutputFile For Append As lFileOutput
  533.    If Not EOF(lFileInput) Then Line Input #lFileInput, sTmp
  534.    Do Until EOF(lFileInput)
  535.       Line Input #lFileInput, sTmp
  536.       If bUnicode Then
  537.          Print #lFileOutput, StrConv(sTmp & vbNewLine, vbUnicode);
  538.       Else
  539.          Print #lFileOutput, sTmp
  540.       End If
  541.    Loop
  542.    Close lFileInput, lFileOutput
  543.    Exit Sub
  544.  
  545. UnisciReg_Errore:
  546.  
  547.    MsgBox "Errore " & Err.Number & " nella procedura modRegistroSistema." & _
  548.       "UnisciReg." & vbCrLf & vbCrLf & Err.Description, vbCritical
  549.  
  550. End Sub
  551.  
  552. '------------------------------------------------------------------
  553. ' Procedura : UnicodeFile
  554. ' DataOra   : 14/07/2003 18.25
  555. ' Autore    : Giuseppe Cazzato
  556. ' Scopo     : Dato un file di testo, dice se è un file unicode o no
  557. '------------------------------------------------------------------
  558. Private Function UnicodeFile(ByVal sFile As String) As Boolean
  559.  
  560.    Const txtfmtUnicode = &HFEFF
  561.    Const txtfmtBigEndianUnicode = &HFFFE
  562.  
  563.    Dim lFile As Long
  564.    Dim iFlag As Integer
  565.  
  566.    On Error GoTo UnicodeFile_Errore
  567.  
  568.    UnicodeFile = False
  569.    If FileLen(sFile) >= 2 Then
  570.       lFile = FreeFile
  571.       Open sFile For Binary Access Read As lFile
  572.       Get #lFile, , iFlag
  573.       Close lFile
  574.       UnicodeFile = (iFlag = txtfmtUnicode)
  575.    End If
  576.    Exit Function
  577.  
  578. UnicodeFile_Errore:
  579.  
  580.    MsgBox "Errore " & Err.Number & " nella procedura modRegistroSistema." & _
  581.       "UnicodeFile." & vbCrLf & vbCrLf & Err.Description, vbCritical
  582.    
  583. End Function