Προς το περιεχόμενο

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • 0
leukonas

VB6 registry modufucation

Ερώτηση

Exo ena komati kodika to opio to katebasa apo to internet kai ekana kapies tropopiiseis se ayto gia na kano kapia epilpeon pragmata.Os edo ola kala.To thema einai oti thelo na kano kai kapies alages stin registry.o tipos pou egrapse ton kodika exei grapsei tin function alla adinato na katalabo se ti antistixei i kathe metabliti kai pos na peraso ta stoixeia gia na kanei tin allagi stin registry.den thelo na allakso ton kodika me allon thelo an mporei kapios na me boithisei na katalabo ti einai i kathe metabliti.

 

>kalesma ---- Call CreateRegLong(HKEY_CURRENT_USER, "Software\Microsoft\Windows\CurrentVersion\Policies\System", Command, Not Enabled)

------ 
'Rem -> *************************************************************************************************************************************************
'Rem -> This will create value in the registry of the specified type And value data
Public Sub CreateRegLong(ByVal EnmHive As RegistryHives, ByVal StrSubKey As String, ByVal strValueName As String, ByVal LngData As Long, Optional ByVal EnmType As RegistryLongTypes = REG_DWORD_LITTLE_ENDIAN)
   Dim HKey        As Long     'Rem -> Holds a pointer to an open registry key
   'Rem -> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   'Rem -> Make sure the registry value exists
   Call CreateSubKey(EnmHive, StrSubKey)
   'Rem -> ~~~~~~~~~~~~~~~
   'Rem -> Open the subkey
   HKey = GetSubKeyHandle(EnmHive, StrSubKey, KEY_ALL_ACCESS)
   'Rem -> ~~~~~~~~~~~~~~~~~~~~~~~~~
   'Rem -> Create the registry value
   RegSetValueEx HKey, strValueName, 0, EnmType, LngData, 4
   'Rem -> ~~~~~~~~~~~~~~~~~~~~~~
   'Rem -> close the registry key
   RegCloseKey HKey
End Sub

------
'Rem - '*************************************************************************************************************************************************
'Rem -> This procedure will create a sub key in the specified header key.
Public Sub CreateSubKey(ByVal EnmHive As RegistryHives, ByVal StrSubKey As String)
   Dim HKey        As Long     'Rem -> holds the handle to the created key
   'Rem -> ~~~~~~~~~~~~~~
   'Rem -> Create the key
   RegCreateKey EnmHive, StrSubKey & Chr(0), HKey
   'Rem -> ~~~~~~~~~~~~~
   'Rem -> Close the key
   RegCloseKey HKey
End Sub

------
       Declare Function RegCreateKey Lib "advapi32.dll" _
                               Alias "RegCreateKeyA" _
                               (ByVal HKey As Long, _
                               ByVal lpSubKey As String, _
                               phkResult As Long) _
                               As Long

------
       Declare Function RegCloseKey Lib "advapi32.dll" _
                               (ByVal HKey As Long) _
                               As Long

------
       Declare Function RegSetValueEx Lib "advapi32.dll" _
                               Alias "RegSetValueExA" _
                               (ByVal HKey As Long, _
                               ByVal lpValueName As String, _
                               ByVal Reserved As Long, _
                               ByVal dwType As Long, _
                               lpData As Any, _
                               ByVal cbData As Long) _
                               As Long


------
'Rem -> *************************************************************************************************************************************************
'Rem -> This function returns a handle to the specified registry key
Private Function GetSubKeyHandle(ByVal EnmHive As RegistryHives, ByVal StrSubKey As String, Optional ByVal EnmAccess As RegistryKeyAccess = KEY_READ) As Long
   Dim HKey        As Long     'Rem -> holds the handle to the specified key
   Dim RetVal      As Long     'Rem -> holds any returned error value from an api call
   'Rem -> ~~~~~~~~~~~~~~~~~~~~~
   'Rem -> Open the registry key
   RetVal = RegOpenKeyEx(EnmHive, StrSubKey, 0, EnmAccess, HKey)
   If RetVal <> ERROR_SUCCESS Then
       'Rem -> ~~~~~~~~~~~~~~~~~~~~~
       'Rem -> Could not create key
       HKey = 0
   End If
   'Rem -> ~~~~~~~~~~~~
   'Rem -> Return value
   GetSubKeyHandle = HKey
End Function

 

Ego thelo na kataxoriso ayta stin registry :[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

"NoControlPanel"=dword:00000000

 

Den ksero an ayto pou zitao einai diskolo alla an kapoios mporei na me boithisei as to kanei.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

1 απάντηση σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

Ego thelo na kataxoriso ayta stin registry :[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

"NoControlPanel"=dword:00000000

 

Den ksero an ayto pou zitao einai diskolo alla an kapoios mporei na me boithisei as to kanei.

 

Δεν πολυκοίταξα τον κώδικα που παραθέτεις αλλά γι' αυτό που θέλεις τα παρακάτω πρέπει να κάνουν.

Κατ' αρχήν δηλώνεις την συνάρτηση που ανοίγει ένα κλειδί

>
Declare Function RegOpenKeyExA Lib "advapi32.dll" (ByVal hk As Long, ByVal subk As String, _
   ByVal reserved As Long, ByVal semask As Long, ByRef phk As Long) As Long

Η τιμή επιτυχίας που επιστρέφει η συνάρτηση είναι 0, αλλιώς μια τιμή σφάλματος.

Εδώ η πρώτη παράμετρος είναι ένα ανοιχτό handle σε κλειδί ή μια σταθερή που εκφράζει κάποια από τα προεπιλεγμένα κλειδιά:

>
Const HKEY_USERS = -2147483645#
Const HKEY_LOCAL_MACHINE = -2147483646#
Const HKEY_CURRENT_USER = -2147483647#
Const HKEY_CLASSES_ROOT = -2147483648#

Για τη συγκεκριμένη περίπτωση θα χρησιμοποιήσουμε το HKEY_CURRENT_USER.

Η δεύτερη είναι το path του κλειδιού που θέλουμε να ανοίξουμε (το path κάτω από το hk) δηλαδή για την δικιά μας περίπτωση θα βάλουμε "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" (*το κλειδί πρέπει να υπάρχει αλλιώς η συνάρτηση επιστρέφει σφάλμα)

Η τρίτη είναι reserved όπως λέει και το όνομα και δίνουμε πάντα την τιμή 0.

Η τέταρτη είναι μια σταθερή που εκφράζει τα δικαιώματα που θα έχουμε να παρέμβουμε στο handle (εγγραφή - ανάγνωση - διαγραφή - δημιουργία κτλ). Κάποιες από τις τιμές που μπορεί να πάρει είναι

>
Const KEY_WRITE = 131078
Const KEY_READ = 131097
Const KEY_ALL_ACCESS = 983103

Στην περίπτωσή μας θα χρησιμοποιήσουμε την KEY_WRITE.

Η τέταρτη είναι αυτό που ουσιαστικά ζητάμε από τη συνάρτηση: το handle του κλειδιού που θα ανοιχτεί και θα χρησιμοποιήσουμε για να γράψουμε στις τιμές του κλειδιού.

Όταν τελειώσουμε με την χρήση του κλειδιού πρέπει να κλείσουμε το handle με την

>
Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hk As Long) As Long

Για να γράψουμε την τιμή θα χρησιμοποιήσουμε την συνάρτηση συστήματος RegSetValueExA. Επειδή αυτη δέχεται στο όρισμα της τιμής έναν δείκτη σε byte, θα γράψουμε δύο εκδοχές της, μια για τιμή string και μια για τιμή dword (ουσιαστικά μόνο την δεύτερη χρειαζόμαστε.

>
Declare Function RegSetString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hk As Long, ByVal valname As String, _
   Optional ByVal reserved As Long = 0, Optional ByVal valtype As Long = 1, Optional ByVal value As String = "", _
   Optional ByVal datalen As Long = 0) As Long
   
Declare Function RegSetDword Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hk As Long, ByVal valname As String, _
   Optional ByVal reserved As Long = 0, Optional ByVal valtype As Long = 4, Optional ByRef value As Long = 0, _
   Optional ByVal datalen As Long = 4) As Long

Η πρώτη παράμετρος είναι το handle του κλειδιού που θέλουμε να γράψουμε (αυτό που πήραμε από την RegOpenKeyExA).

Η δεύτερη είναι το όνομα της τιμής (για την περίπτωσή μας "NoControlPanel")

Η τρίτη είναι και εδώ reserved και πάντα 0

Η τέταρτη είναι ο τύπος της τιμής και μπορεί να είναι

>
Const REG_DWORD = 4
Const REG_SZ = 1

και πολλές άλλες βέβαια που δεν θα αναφέρω εδώ. Εμάς μας ενδιαφέρει προς το παρόν μόνο η REG_DWORD.

Η πέμπτη είναι τα δεδομένα, για την πρώτη εκδοχή string, για την δεύτερη long.

H τελευταία είναι το μέγεθος των δεδομένων. Για την string εκδοχή είναι το μήκος της συμβολοσειράς + 1 (τον χαρακτήρα τερματισμού), για την dword εκδοχή είναι 4.

 

Έτσι:

>
Dim h As Long
   
   If (RegOpenKeyExA(HKEY_CURRENT_USER, _
       "Software\Microsoft\Windows\CurrentVersion\Policies\Explorer", _
       0, KEY_WRITE, h) <> 0) Then
       MsgBox "Unable to open key", vbCritical
       Exit Sub
   End If

   RegSetDword h, "NoControlPanel", value:=0
   RegCloseKey h

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...