leukonas Δημοσ. 5 Δεκεμβρίου 2007 Δημοσ. 5 Δεκεμβρίου 2007 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.
bilco Δημοσ. 6 Δεκεμβρίου 2007 Δημοσ. 6 Δεκεμβρίου 2007 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
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.