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
Bilancio familiare - frmAbout.frm

frmAbout.frm

Caricato da: Roberto VB
Scarica il programma completo

  1. Option Explicit
  2.  
  3. ' Opzioni di protezione per la chiave del registro di configurazione
  4. Const READ_CONTROL = &H20000
  5. Const KEY_QUERY_VALUE = &H1
  6. Const KEY_SET_VALUE = &H2
  7. Const KEY_CREATE_SUB_KEY = &H4
  8. Const KEY_ENUMERATE_SUB_KEYS = &H8
  9. Const KEY_NOTIFY = &H10
  10. Const KEY_CREATE_LINK = &H20
  11. Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + _
  12.                        KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + _
  13.                        KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL
  14.                      
  15. ' Chiavi principali del registro di configurazione
  16. Const HKEY_LOCAL_MACHINE = &H80000002
  17. Const ERROR_SUCCESS = 0
  18. Const REG_SZ = 1                         ' Stringa Unicode che termina con un carattere Null
  19. Const REG_DWORD = 4                      ' Numero a 32 bit
  20.  
  21. Const gREGKEYSYSINFOLOC = "SOFTWARE\Microsoft\Shared Tools Location"
  22. Const gREGVALSYSINFOLOC = "MSINFO"
  23. Const gREGKEYSYSINFO = "SOFTWARE\Microsoft\Shared Tools\MSINFO"
  24. Const gREGVALSYSINFO = "PATH"
  25.  
  26. Private Declare Function RegOpenKeyEx Lib "advapi32" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, ByRef phkResult As Long) As Long
  27. Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, ByRef lpType As Long, ByVal lpData As String, ByRef lpcbData As Long) As Long
  28. Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
  29.  
  30.  
  31. Private Sub cmdSysInfo_Click()
  32.   Call StartSysInfo
  33. End Sub
  34.  
  35. Private Sub cmdOK_Click()
  36.   Unload Me
  37. End Sub
  38.  
  39. Private Sub Form_Load()
  40.     Me.Caption = "Informazioni su " & App.Title
  41.     lblVersion.Caption = "Versione " & App.Major & "." & App.Minor & "." & App.Revision
  42.     lblTitle.Caption = App.Title
  43. End Sub
  44.  
  45. Public Sub StartSysInfo()
  46.     On Error GoTo SysInfoErr
  47.  
  48.     Dim rc As Long
  49.     Dim SysInfoPath As String
  50.    
  51.     ' Tenta di recuperare dal registro di configurazione il percorso e il nome
  52.     ' del programma che consente di visualizzare le informazioni sul sistema
  53.     If GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFO, gREGVALSYSINFO, SysInfoPath) Then
  54.     ' Tenta di recuperare dal registro di configurazione solo il percorso
  55.     ' del programma che consente di visualizzare le informazioni sul sistema
  56.     ElseIf GetKeyValue(HKEY_LOCAL_MACHINE, gREGKEYSYSINFOLOC, gREGVALSYSINFOLOC, SysInfoPath) Then
  57.         ' Convalida l'esistenza di una versione a 32 bit del file conosciuta
  58.         If (Dir(SysInfoPath & "\MSINFO32.EXE") <> "") Then
  59.             SysInfoPath = SysInfoPath & "\MSINFO32.EXE"
  60.            
  61.         ' Errore. Il file non è stato trovato.
  62.         Else
  63.             GoTo SysInfoErr
  64.         End If
  65.     ' Errore. La chiave del registro di configurazione non è stata trovata.
  66.     Else
  67.         GoTo SysInfoErr
  68.     End If
  69.    
  70.     Call Shell(SysInfoPath, vbNormalFocus)
  71.    
  72.     Exit Sub
  73. SysInfoErr:
  74.     MsgBox "Le informazioni sul sistema non sono attualmente disponibili.", vbOKOnly
  75. End Sub
  76.  
  77. Public Function GetKeyValue(KeyRoot As Long, KeyName As String, SubKeyRef As String, ByRef KeyVal As String) As Boolean
  78.     Dim i As Long                                           ' Contatore per il ciclo
  79.     Dim rc As Long                                          ' Codice restituito
  80.     Dim hKey As Long                                        ' Handle a una chiave del registro di configurazione aperta
  81.     Dim hDepth As Long                                      '
  82.     Dim KeyValType As Long                                  ' Tipo di dati di una chiave del registro di configurazione
  83.     Dim tmpVal As String                                    ' Posizione di memorizzazione temporanea del valore di una chiave del registro di configurazione
  84.     Dim KeyValSize As Long                                  ' Dimensioni della variabile della chiave del registro di configurazione
  85.     '------------------------------------------------------------
  86.     ' Apre una chiave del registro di configurazione in una chiave principale {HKEY_LOCAL_MACHINE...}
  87.     '------------------------------------------------------------
  88.     rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' Apre la chiave del registro di configurazione
  89.    
  90.     If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError          ' Gestione degli errori
  91.    
  92.     tmpVal = String$(1024, 0)                             ' Assegna spazio alla variabile
  93.     KeyValSize = 1024                                       ' Specifica le dimensioni della variabile
  94.    
  95.     '------------------------------------------------------------
  96.     ' Recupera il valore della chiave del registro di configurazione
  97.     '------------------------------------------------------------
  98.     rc = RegQueryValueEx(hKey, SubKeyRef, 0, _
  99.                          KeyValType, tmpVal, KeyValSize)    ' Recupera/crea il valore della chiave
  100.                        
  101.     If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError          ' Gestione degli errori
  102.    
  103.     If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then           ' In Win95 viene aggiunta una stringa che termina con un carattere Null
  104.         tmpVal = Left(tmpVal, KeyValSize - 1)               ' È stato trovato un carattere Null, che viene estratto dalla stringa
  105.     Else                                                    ' In WinNT non viene aggiunto un carattere Null al termine della stringa
  106.         tmpVal = Left(tmpVal, KeyValSize)                   ' Non è stato trovato nessun carattere Null, pertanto estrae solo la stringa
  107.     End If
  108.     '------------------------------------------------------------
  109.     ' Determina il tipo del valore della chiave per la conversione
  110.     '------------------------------------------------------------
  111.     Select Case KeyValType                                  ' Cerca i tipi di dati
  112.     Case REG_SZ                                             ' Tipo di dati String per la chiave del registro di configurazione
  113.         KeyVal = tmpVal                                     ' Copia il valore String
  114.     Case REG_DWORD                                          ' Tipo di dati Double Word per la chiave del registro di configurazione
  115.         For i = Len(tmpVal) To 1 Step -1                    ' Converte ogni bit
  116.             KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1)))   ' Crea il valore carattere per carattere
  117.         Next
  118.         KeyVal = Format$("&h" + KeyVal)                     ' Converte Double Word in String
  119.     End Select
  120.    
  121.     GetKeyValue = True                                      ' Restituisce un valore che indica che l'operazione è riuscita
  122.     rc = RegCloseKey(hKey)                                  ' Chiude la chiave del registro di configurazione
  123.     Exit Function                                           ' Esce dalla routine
  124.    
  125. GetKeyError:      ' Reimposta i dati se viene generato un errore
  126.     KeyVal = ""                                             ' Imposta su una stringa vuota il valore restituito
  127.     GetKeyValue = False                                     ' Restituisce un valore che indica che l'operazione non è riuscita
  128.     rc = RegCloseKey(hKey)                                  ' Chiude la chiave del registro di configurazione
  129. End Function