Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    115

    [VB6] Presenza di programma installato (tramite REG)

    Ciao a tutti... son di nuovo qui a chiedere il vostro aiuto
    Ho cercato a documentarmi da solo e penso di aver trovato anche ciò che serve ma non son ancora riuscito a risolvere il mio problema. Devo capire se un programma è installato o meno sulla macchina, data la chiave di registro corrispondente, dunque devo sapere se questa chiave esiste o meno. Un esempio, voglio sapere se CCleaner è installato... controllerò se esiste questa chiave:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall\CCleaner

    Ho trovato queste fonti che trattano cose molto simili ed ho fatto anche delle prove ma nulla... potete scrivermi il codice di come fareste voi?

    http://www.windowsdevcenter.com/pub/...ry_Values.html
    http://www.vbsimple.net/index.htm?/howto/ht_044.htm
    http://www.devx.com/vb2themax/Tip/19134

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    115
    UP!

  3. #3
    Ma il tuo problema in sostanza è che non sai verificare se una chiave di registro esiste, giusto?
    http://www.devx.com/vb2themax/Tip/19131
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    115
    MItaly grazie per la segnalazione... ho fatto delle prove ma non riesco proprio a farlo andare! Quando metto la funzione per esempio nel Form Load non me la lascia mettere e mi obbliga a chiudere il Sub prima dell'inizio della funzione... come faccio? Potresti darmi il codice per verificare dal Form Load per esempio se esiste la chiave
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Uninstall\CCleaner

    Boh per esempio si può fare che se esiste scrive in Label1 che esiste altrimenti no... tanto per verificare se va! Io giuro che le ho provate tutte ma non ne vengo a capo

  5. #5
    Scusa, tu stai cercando di inserire il corpo della funzione che ti ho linkato all'interno di un'altra funzione (Form_Load)?
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    115
    No sorry! Sta fuori, però poi non so come fare...cioè devo usare la funzione CheckRegistryKey ma su cosa? Viene una cosa come

    CheckRegistryKey = CheckRegistryKey(HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall)
    If CheckRegistryKey = True Then
    Label1 = "La chiave esiste! Urra!!!"
    End If


    Perfavore poni fine alle mie castronerie

  7. #7
    Metti in un modulo a parte questo codice:
    codice:
    Public Const HKEY_CLASSES_ROOT = &H80000000
    Public Const HKEY_CURRENT_CONFIG = &H80000005
    Public Const HKEY_CURRENT_USER = &H80000001
    Public Const HKEY_DYN_DATA = &H80000006
    Public Const HKEY_LOCAL_MACHINE = &H80000002
    Public Const HKEY_PERFORMANCE_DATA = &H80000004
    Public Const HKEY_USERS = &H80000003
    Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
        (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, _
        ByVal samDesired As Long, phkResult As Long) As Long
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As _
        Long
    
    Private Const KEY_READ = &H20019  ' ((READ_CONTROL Or KEY_QUERY_VALUE Or 
                              ' KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not 
                              ' SYNCHRONIZE))
    
    'Return True if a Registry key exists
    Public Function CheckRegistryKey(ByVal hKey As Long, ByVal KeyName As String) As _
        Boolean
        Dim handle As Long
        ' Try to open the key
        If RegOpenKeyEx(hKey, KeyName, 0, KEY_READ, handle) = 0 Then
            ' The key exists
            CheckRegistryKey = True
            ' Close it before exiting
            RegCloseKey handle
        End If
    End Function
    e quindi richiama la funzione in questo modo:
    codice:
    If CheckRegistryKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner") Then
        Label1.Caption = "La chiave esiste."
    Els
        Label1.Caption = "La chiave non esiste."
    End If
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    115
    GRAZIE!!!!! <-- non so se esprimono al meglio la mia felicità ^^

    A proposito, su MSN perchè non ci sei mai?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    115
    Rettifico... andava finchè era un progetto a parte... quando l'ho implementato nel programma funziona, ma dopo 2 o 3 secondi da questo errore:

    codice:
    Run-time error '91':
    
    Object variable or With block variable not set
    Oltre ad avere creato il nuovo modulo con il corpo della funzione tale quale a come l'hai scritto tu, nel prog ho messo così:

    codice:
    For cont1 = 0 To 12
    If CheckRegistryKey(HKEY_LOCAL_MACHINE, gioco(cont1, 1)) Then
        lst1.AddItem (prog(cont1, 0))
    End If
    Next
    Funzionare funziona perchè guardando i risultati nel programma sono corretti, però dà questo errore che prima non dava quindi dovrebbe essere dovuto a quello.

  10. #10
    Su che riga dà questo errore?
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.