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
Msconf87 - Module2.bas

Module2.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    : Samuele Battarra
  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. '------------------------------------------------------------------
  126. ' Procedura : TrovaBase
  127. ' DataOra   : 07/06/2003 14.52
  128. ' Autore    : Samuele Battarra
  129. ' Scopo     : Restituisce il codice relativo al ramo principale della chiave
  130. '------------------------------------------------------------------
  131. Private Function TrovaBase(ByRef sNome As String) As Long
  132.  
  133.    Dim sBase As String
  134.    Dim lPos As Long
  135.  
  136.    lPos = InStr(sNome, "\")
  137.    If lPos > 0 Then
  138.       sBase = UCase$(Left$(sNome, lPos - 1))
  139.       sNome = Mid$(sNome, lPos + 1)
  140.    Else
  141.       sBase = sNome
  142.       sNome = ""
  143.    End If
  144.    Select Case sBase
  145.       Case "HKEY_CLASSES_ROOT": TrovaBase = HKEY_CLASSES_ROOT
  146.       Case "HKEY_CURRENT_USER": TrovaBase = HKEY_CURRENT_USER
  147.       Case "HKEY_LOCAL_MACHINE": TrovaBase = HKEY_LOCAL_MACHINE
  148.       Case "HKEY_USERS": TrovaBase = HKEY_USERS
  149.       Case "HKEY_PERFORMANCE_DATA": TrovaBase = HKEY_PERFORMANCE_DATA
  150.       Case "HKEY_CURRENT_CONFIG": TrovaBase = HKEY_CURRENT_CONFIG
  151.       Case "HKEY_DYN_DATA": TrovaBase = HKEY_DYN_DATA
  152.       Case Else: TrovaBase = &H88888888   'Valore non valido
  153.    End Select
  154.  
  155. End Function
  156.  
  157. '------------------------------------------------------------------
  158. ' Procedura : CreaChiave
  159. ' DataOra   : 07/06/2003 14.53
  160. ' Autore    : Samuele Battarra
  161. ' Scopo     : Creare una nuova chiave
  162. '------------------------------------------------------------------
  163. Public Function CreaChiave(ByVal sNome As String) As Boolean
  164.  
  165.    Dim lChiave As Long
  166.    Dim lBase As Long
  167.    Dim lRis As Long
  168.  
  169.    lBase = TrovaBase(sNome)
  170.    CreaChiave = (RegCreateKeyEx(lBase, sNome, 0&, vbNullString, _
  171.       REG_OPTION_NON_VOLATILE, KEY_QUERY_VALUE, ByVal 0&, lChiave, _
  172.       lRis) = ERROR_SUCCESS)
  173.    If CreaChiave Then CreaChiave = ChiudiChiave(lChiave)
  174.  
  175. End Function
  176.  
  177. '------------------------------------------------------------------
  178. ' Procedura : CancellaChiave
  179. ' DataOra   : 07/06/2003 15.01
  180. ' Autore    : Samuele Battarra
  181. ' Scopo     : Elimina una chiave
  182. '------------------------------------------------------------------
  183. Public Function CancellaChiave(ByVal sNome As String) As Boolean
  184.  
  185.    Dim lBase As Long
  186.  
  187.    lBase = TrovaBase(sNome)
  188.    CancellaChiave = (RegDeleteKey(lBase, sNome) = ERROR_SUCCESS)
  189.  
  190. End Function
  191.  
  192. '------------------------------------------------------------------
  193. ' Procedura : ApriChiave
  194. ' DataOra   : 07/06/2003 15.05
  195. ' Autore    : Samuele Battarra
  196. ' Scopo     : Apre una chiave e restituisce il suo handle
  197. '------------------------------------------------------------------
  198. Public Function ApriChiave(ByVal sNome As String, _
  199.    ByRef hChiave As Long, ByVal lAccesso As Long) As Boolean
  200.  
  201.    Dim lBase As Long
  202.  
  203.    lBase = TrovaBase(sNome)
  204.    ApriChiave = (RegOpenKeyEx(lBase, sNome, 0&, lAccesso, hChiave) = ERROR_SUCCESS)
  205.  
  206. End Function
  207.  
  208. '------------------------------------------------------------------
  209. ' Procedura : ChiudiChiave
  210. ' DataOra   : 07/06/2003 15.14
  211. ' Autore    : Samuele Battarra
  212. ' Scopo     : Chiude una chiave dato l'handle
  213. '------------------------------------------------------------------
  214. Public Function ChiudiChiave(ByVal hChiave As Long) As Boolean
  215.  
  216.    ChiudiChiave = (RegCloseKey(hChiave) = ERROR_SUCCESS)
  217.  
  218. End Function
  219.  
  220. '------------------------------------------------------------------
  221. ' Procedura : EnumeraSottoChiavi
  222. ' DataOra   : 07/06/2003 20.03
  223. ' Autore    : Samuele Battarra
  224. ' Scopo     : Elenca le sottochiavi di una chiave
  225. '------------------------------------------------------------------
  226. Public Function EnumeraSottoChiavi(ByVal sChiave As String, ByVal lIndice As Long, _
  227.    ByRef sSubChiave As String) As Boolean
  228.  
  229.    Dim hChiave As Long
  230.    Dim lNumCar As Long
  231.    Dim uData As FILETIME
  232.    Dim lRet As Long
  233.  
  234.    EnumeraSottoChiavi = False
  235.    If ApriChiave(sChiave, hChiave, KEY_ENUMERATE_SUB_KEYS Or KEY_QUERY_VALUE) Then
  236.       sSubChiave = Space$(10000)
  237.       lNumCar = 10000
  238.       lRet = RegEnumKeyEx(hChiave, lIndice, sSubChiave, lNumCar, 0&, 0&, 0&, uData)
  239.       If lRet = ERROR_MORE_DATA Then
  240.          sSubChiave = Left$(sSubChiave, lNumCar)
  241.          EnumeraSottoChiavi = True
  242.       End If
  243.       EnumeraSottoChiavi = (lRet <> ERROR_NO_MORE_ITEMS)
  244.       ChiudiChiave hChiave
  245.    End If
  246. End Function
  247.  
  248. '------------------------------------------------------------------
  249. ' Procedura : LeggiChiaveStringa
  250. ' DataOra   : 07/06/2003 15.15
  251. ' Autore    : Samuele Battarra
  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. End Function
  277.  
  278. '------------------------------------------------------------------
  279. ' Procedura : LeggiChiaveBinario
  280. ' DataOra   : 07/06/2003 19.24
  281. ' Autore    : Samuele Battarra
  282. ' Scopo     : Legge un valore binario dalla chiave specificata,
  283. '             se non ci riesce restituisce il valore di dafault.
  284. '             Qualsiasi chiave, anche di tipo non binario, può
  285. '             essere letta come binario.
  286. '------------------------------------------------------------------
  287. Public Function LeggiChiaveBinario(ByVal sChiave As String, ByVal sNome As String, _
  288.    ByRef byValore() As Byte) As Boolean
  289.  
  290.    Dim hChiave As Long
  291.    Dim lDimensione As Long
  292.    Dim lTipo As Long
  293.  
  294.    LeggiChiaveBinario = False
  295.    If ApriChiave(sChiave, hChiave, KEY_QUERY_VALUE) Then
  296.       If (RegQueryValueEx(hChiave, sNome, 0&, lTipo, ByVal 0&, _
  297.          lDimensione) = ERROR_SUCCESS) Then
  298.          ReDim byValore(0 To lDimensione - 1)
  299.          LeggiChiaveBinario = (RegQueryValueEx(hChiave, sNome, 0&, ByVal 0&, _
  300.             byValore(0), lDimensione) = ERROR_SUCCESS)
  301.       End If
  302.       ChiudiChiave hChiave
  303.    End If
  304.  
  305. End Function
  306.  
  307. '------------------------------------------------------------------
  308. ' Procedura : LeggiChiaveNumero
  309. ' DataOra   : 07/06/2003 19.37
  310. ' Autore    : Samuele Battarra
  311. ' Scopo     : Legge un numero dalla chiave specificata,
  312. '             se non ci riesce restituisce il valore di dafault
  313. '------------------------------------------------------------------
  314. Public Function LeggiChiaveNumero(ByVal sChiave As String, ByVal sNome As String, _
  315.    ByRef lValore As Long, Optional ByVal lDefault As Long = 0) As Boolean
  316.  
  317.    Dim hChiave As Long
  318.    Dim lTipo As Long
  319.  
  320.    LeggiChiaveNumero = False
  321.    If ApriChiave(sChiave, hChiave, KEY_QUERY_VALUE) Then
  322.       LeggiChiaveNumero = ((RegQueryValueEx(hChiave, sNome, 0&, _
  323.          lTipo, lValore, 4) = ERROR_SUCCESS) And (lTipo = REG_DWORD))
  324.       ChiudiChiave hChiave
  325.    End If
  326.    If Not LeggiChiaveNumero Then lValore = lDefault
  327.  
  328. End Function
  329.  
  330. '------------------------------------------------------------------
  331. ' Procedura : LeggiChiaveBooleano
  332. ' DataOra   : 07/06/2003 19.38
  333. ' Autore    : Samuele Battarra
  334. ' Scopo     : Legge un valore vero/falso dalla chiave specificata,
  335. '             se non ci riesce restituisce il valore di dafault
  336. '------------------------------------------------------------------
  337. Public Function LeggiChiaveBooleano(ByVal sChiave As String, ByVal sNome As String, _
  338.    ByRef bValore As Boolean, Optional ByVal bDefault As Boolean = False) As Boolean
  339.  
  340.    Dim lRet As Long
  341.  
  342.    LeggiChiaveBooleano = LeggiChiaveNumero(sChiave, sNome, lRet, IIf(bDefault, 1, 0))
  343.    bValore = (lRet <> 0)
  344.  
  345. End Function
  346.  
  347. '------------------------------------------------------------------
  348. ' Procedura : ScriviChiaveStringa
  349. ' DataOra   : 07/06/2003 19.40
  350. ' Autore    : Samuele Battarra
  351. ' Scopo     : Scrive una stringa nella chiave se il suo valore è diverso
  352. '             da quello di default, altrimenti cancella la stringa dalla chiave
  353. '------------------------------------------------------------------
  354. Public Function ScriviChiaveStringa(ByVal sChiave As String, ByVal sNome As String, _
  355.    ByVal sValore As String, Optional ByVal sDefault As String = "") As Boolean
  356.  
  357.    Dim hChiave As Long
  358.  
  359.    ScriviChiaveStringa = False
  360.    If ApriChiave(sChiave, hChiave, KEY_SET_VALUE) Then
  361.       If sValore <> sDefault Then
  362.          ScriviChiaveStringa = (RegSetValueEx(hChiave, sNome, 0&, REG_SZ, _
  363.             ByVal sValore, LenB(StrConv(sValore, vbFromUnicode)) + 1) = ERROR_SUCCESS)
  364.       Else
  365.          ScriviChiaveStringa = CancellaValore(hChiave, sNome)
  366.       End If
  367.       ChiudiChiave hChiave
  368.    End If
  369.  
  370. End Function
  371.  
  372. '------------------------------------------------------------------
  373. ' Procedura : ScriviChiaveBinario
  374. ' DataOra   : 07/06/2003 19.56
  375. ' Autore    : Samuele Battarra
  376. ' Scopo     : Scrive un valore binario nella chiave
  377. '------------------------------------------------------------------
  378. Public Function ScriviChiaveBinario(ByVal sChiave As String, ByVal sNome As String, _
  379.    ByRef byValore() As Byte) As Boolean
  380.  
  381.    Dim hChiave As Long
  382.    Dim lDimensione As Long
  383.  
  384.    ScriviChiaveBinario = False
  385.    If ApriChiave(sChiave, hChiave, KEY_SET_VALUE) Then
  386.       lDimensione = UBound(byValore) - LBound(byValore) + 1
  387.       ScriviChiaveBinario = (RegSetValueEx(hChiave, sNome, 0&, _
  388.          REG_BINARY, byValore(0), lDimensione) = ERROR_SUCCESS)
  389.       ChiudiChiave hChiave
  390.    End If
  391.  
  392. End Function
  393.  
  394. '------------------------------------------------------------------
  395. ' Procedura : ScriviChiaveNumero
  396. ' DataOra   : 07/06/2003 19.57
  397. ' Autore    : Samuele Battarra
  398. ' Scopo     : Scrive un numero nella chiave se il suo valore è diverso
  399. '             da quello di default, altrimenti cancella il numero dalla chiave
  400. '------------------------------------------------------------------
  401. Public Function ScriviChiaveNumero(ByVal sChiave As String, ByVal sNome As String, _
  402.    ByVal lValore As Long, Optional ByVal lDefault As Long = 0) As Boolean
  403.  
  404.    Dim hChiave As Long
  405.  
  406.    ScriviChiaveNumero = False
  407.    If ApriChiave(sChiave, hChiave, KEY_SET_VALUE) Then
  408.       If lValore <> lDefault Then
  409.          ScriviChiaveNumero = (RegSetValueEx(hChiave, sNome, 0&, _
  410.             REG_DWORD, lValore, 4) = ERROR_SUCCESS)
  411.       Else
  412.          ScriviChiaveNumero = CancellaValore(hChiave, sNome)
  413.       End If
  414.       ChiudiChiave hChiave
  415.    End If
  416.  
  417. End Function
  418.  
  419. '------------------------------------------------------------------
  420. ' Procedura : ScriviChiaveBooleano
  421. ' DataOra   : 07/06/2003 19.58
  422. ' Autore    : Samuele Battarra
  423. ' Scopo     : 'Scrive un valore vero/falso nella chiave se il suo valore è
  424. '             diverso da quello di default, altrimenti cancella il valore dalla chiave
  425. '------------------------------------------------------------------
  426. Public Function ScriviChiaveBooleano(ByVal sChiave As String, ByVal sNome As String, _
  427.    ByVal bValore As Boolean, Optional ByVal bDefault As Boolean = False) As Boolean
  428.  
  429.    ScriviChiaveBooleano = ScriviChiaveNumero(sChiave, sNome, _
  430.       IIf(bValore, 1, 0), IIf(bDefault, 1, 0))
  431.  
  432. End Function
  433.  
  434. '------------------------------------------------------------------
  435. ' Procedura : CancellaValore
  436. ' DataOra   : 07/06/2003 19.46
  437. ' Autore    : Samuele Battarra
  438. ' Scopo     : Cancella un valore (stringa o numero) da una chiave
  439. '------------------------------------------------------------------
  440. Public Function CancellaValore(ByVal hChiave As Long, _
  441.    ByVal sNome As String) As Boolean
  442.  
  443.    CancellaValore = (RegDeleteValue(hChiave, sNome) = ERROR_SUCCESS)
  444.  
  445. End Function
  446. '------------------------------------------------------------------
  447. ' Procedura : EnumeraSottoValori
  448. ' DataOra   : 19/11/2005 12.00
  449. ' Autore    : Samuele Battarra
  450. ' Scopo     : Elenca i valori di una chiave
  451. '------------------------------------------------------------------
  452. Public Function EnumeraValori(ByVal sChiave As String, ByVal lIndice As Long, _
  453.    ByRef sNome As String, ByRef lTipo As Long) As Boolean
  454.  
  455.    Dim hChiave As Long
  456.    Dim lNumCar As Long
  457.    Dim lRet As Long
  458.  
  459.    EnumeraValori = False
  460.    If ApriChiave(sChiave, hChiave, KEY_ALL_ACCESS) Then
  461.       sNome = Space$(10000)
  462.       lNumCar = 10000
  463.       lRet = RegEnumValue(hChiave, lIndice, sNome, _
  464.          lNumCar, 0&, lTipo, ByVal 0&, ByVal 0&)
  465.       If lRet = ERROR_SUCCESS Then
  466.          sNome = Left$(sNome, lNumCar)
  467.          EnumeraValori = (lRet <> ERROR_NO_MORE_ITEMS)
  468.       End If
  469.       ChiudiChiave hChiave
  470.    End If
  471.  
  472. End Function
  473. '------------------------------------------------------------------
  474. ' Procedura : SalvaChiave
  475. ' DataOra   : 08/06/2003 18.11
  476. ' Autore    : Samuele Battarra
  477. ' Scopo     : Salvare il contenuto di una chiave in un file .reg
  478. ' Note      : Se bAppend è True le informazioni verranno aggiunte
  479. '             al file, altrimenti questo verrà sovrascritto
  480. '------------------------------------------------------------------
  481. Public Function SalvaChiave(ByVal sNomeChiave As String, _
  482.    ByVal sNomeFile As String, Optional ByVal bAppend As Boolean = False) As Boolean
  483.  
  484.    Dim sRegEdit As String
  485.    Dim lCar As Long
  486.  
  487.    sRegEdit = Space$(256)
  488.    lCar = GetWindowsDirectory(sRegEdit, Len(sRegEdit))
  489.    sRegEdit = Left$(sRegEdit, lCar) & "\regedit.exe /save "
  490.    If Not bAppend Then
  491.       Shell sRegEdit & """" & sNomeFile & """ """ & sNomeChiave & """"
  492.    Else
  493.       Shell sRegEdit & """" & App.Path & "\tmppmt.reg"" """ & sNomeChiave & """"
  494.       UnisciReg sNomeFile, App.Path & "\tmppmt.reg"
  495.       Kill App.Path & "\tmppmt.reg"
  496.    End If
  497.  
  498. End Function
  499.  
  500. '------------------------------------------------------------------
  501. ' Procedura : ImportaReg
  502. ' DataOra   : 08/06/2003 18.11
  503. ' Autore    : Samuele Battarra
  504. ' Scopo     : Importare il contenuto di una file .reg nel registro
  505. '------------------------------------------------------------------
  506. Public Function ImportaReg(ByVal sNomeFile As String) As Boolean
  507.  
  508.    Dim sPath As String
  509.  
  510.    sPath = Space$(256)
  511.    GetWindowsDirectory sPath, Len(sPath)
  512.    Shell sPath & "\regedit.exe """ & sNomeFile & """"
  513.      
  514. End Function
  515.  
  516. '------------------------------------------------------------------
  517. ' Procedura : UnisciReg
  518. ' DataOra   : 12/07/2003 21.38
  519. ' Autore    : Samuele Battarra
  520. ' Scopo     : Aggiunge un file reg ad un'altro
  521. '------------------------------------------------------------------
  522. Private Sub UnisciReg(ByVal sOutputFile As String, ByVal sInputFile As String)
  523.  
  524.    Dim lFileInput As Long
  525.    Dim lFileOutput As Long
  526.    Dim sTmp As String
  527.    Dim bUnicode As Boolean
  528.  
  529.    On Error GoTo UnisciReg_Errore
  530.  
  531.    bUnicode = UnicodeFile(sOutputFile)
  532.    lFileInput = FreeFile
  533.    Open sInputFile For Input As lFileInput
  534.    lFileOutput = FreeFile
  535.    Open sOutputFile For Append As lFileOutput
  536.    If Not EOF(lFileInput) Then Line Input #lFileInput, sTmp
  537.    Do Until EOF(lFileInput)
  538.       Line Input #lFileInput, sTmp
  539.       If bUnicode Then
  540.          Print #lFileOutput, StrConv(sTmp & vbNewLine, vbUnicode);
  541.       Else
  542.          Print #lFileOutput, sTmp
  543.       End If
  544.    Loop
  545.    Close lFileInput, lFileOutput
  546.    Exit Sub
  547.  
  548. UnisciReg_Errore:
  549.  
  550.    MsgBox "Errore " & Err.Number & " nella procedura modRegistroSistema." & _
  551.       "UnisciReg." & vbCrLf & vbCrLf & Err.Description, vbCritical
  552.  
  553. End Sub
  554.  
  555. '------------------------------------------------------------------
  556. ' Procedura : UnicodeFile
  557. ' DataOra   : 14/07/2003 18.25
  558. ' Autore    : Samuele Battarra
  559. ' Scopo     : Dato un file di testo, dice se è un file unicode o no
  560. '------------------------------------------------------------------
  561. Private Function UnicodeFile(ByVal sFile As String) As Boolean
  562.  
  563.    Const txtfmtUnicode = &HFEFF
  564.    Const txtfmtBigEndianUnicode = &HFFFE
  565.  
  566.    Dim lFile As Long
  567.    Dim iFlag As Integer
  568.  
  569.    On Error GoTo UnicodeFile_Errore
  570.  
  571.    UnicodeFile = False
  572.    If FileLen(sFile) >= 2 Then
  573.       lFile = FreeFile
  574.       Open sFile For Binary Access Read As lFile
  575.       Get #lFile, , iFlag
  576.       Close lFile
  577.       UnicodeFile = (iFlag = txtfmtUnicode)
  578.    End If
  579.    Exit Function
  580.  
  581. UnicodeFile_Errore:
  582.  
  583.    MsgBox "Errore " & Err.Number & " nella procedura modRegistroSistema." & _
  584.       "UnicodeFile." & vbCrLf & vbCrLf & Err.Description, vbCritical
  585.    
  586. End Function