modifier une clé de la base de registre avec un exécutable

modifier une clé de la base de registre avec un exécutable - Windows & Software

Marsh Posté le 30-03-2002 à 20:44:50    

bonjour
 
j'aurai besoin de modifier une clé de la base de registre au lancement de l'ordinateur (pour restaurer une config d'un logiciel) quelqu'un à une solution ??
 
merci

Reply

Marsh Posté le 30-03-2002 à 20:44:50   

Reply

Marsh Posté le 30-03-2002 à 20:48:42    

Un fichier .reg lancé au démarrage de l'ordinateur en ajoutant la ligne de commande correspondante "regedit -s nom_du_fichier.reg" à la clé HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

Reply

Marsh Posté le 30-03-2002 à 21:01:21    

Oui c'est une solution
mais y aurait-il une solution qui ne mette pas en évidence la clé à implanté ?
un exécutable par exemple ?

Reply

Marsh Posté le 30-03-2002 à 21:04:07    

Ok pour rendre la modification plus "discrète" tu peux écrire un petit programme en VB ou en C qui utilisera les fonctions de l'API Win32 afin de modifier ladite clé.
 
Un lien vers la liste des appels liés à la base de registre :
http://msdn.microsoft.com/library/ [...] i_59mb.asp

Reply

Marsh Posté le 30-03-2002 à 21:09:32    

Gloups !
 
Je suis même pas sur d'avoir VB et j'ai jamais programmé en VB mais je vais quand même regarder (c'est pas gagné...)

Reply

Marsh Posté le 30-03-2002 à 21:10:11    

Un bout de code VB permettant de manipuler la base de registre récupéré sur le MSDN il y a un moment...
 
A partir de la ce devrait être assez simple.
 

Code :
  1. Option Explicit
  2. ' Reg Key Security Options...
  3. Global Const KEY_ALL_ACCESS = &H2003F
  4. Global Const REG_OPTION_NON_VOLATILE = 0
  5. ' Reg Key ROOT Types...
  6. Global Const HKEY_CURRENT_USER = &H80000001
  7. Global Const HKEY_LOCAL_MACHINE = &H80000002
  8. Global Const ERROR_SUCCESS = 0
  9. Global Const REG_SZ = 1                         ' Unicode nul terminated string
  10. Global Const REG_DWORD = 4                      ' 32-bit number
  11. Declare Function RegCreateKeyEx Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, ByVal lpSecurityAttributes As Long, phkResult As Long, lpdwDisposition As Long) As Long
  12. 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
  13. 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
  14. Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
  15. Declare Function RegSetValueExString Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpValue As String, ByVal cbData As Long) As Long
  16. Declare Function RegSetValueExLong Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpValue As Long, ByVal cbData As Long) As Long
  17. Public Function GetKeyValue( _
  18.                                 KeyRoot As Long, _
  19.                                 KeyName As String, _
  20.                                 SubKeyRef As String, _
  21.                                 ByRef KeyVal As String _
  22.                                 ) As Boolean
  23.         Dim i As Long                                           ' Loop Counter
  24.         Dim rc As Long                                          ' Return Code
  25.         Dim hKey As Long                                        ' Handle To An Open Registry Key
  26.         Dim hDepth As Long                                      '
  27.         Dim KeyValType As Long                                  ' Data Type Of A Registry Key
  28.         Dim tmpVal As String                                    ' Tempory Storage For A Registry Key Value
  29.         Dim KeyValSize As Long                                  ' Size Of Registry Key Variable
  30.         '------------------------------------------------------------
  31.         ' Open RegKey Under KeyRoot {HKEY_LOCAL_MACHINE...}
  32.         '------------------------------------------------------------
  33.         rc = RegOpenKeyEx(KeyRoot, KeyName, 0, KEY_ALL_ACCESS, hKey) ' Open Registry Key
  34.        
  35.         If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError          ' Handle Error...
  36.        
  37.         tmpVal = String$(1024, 0)                             ' Allocate Variable Space
  38.         KeyValSize = 1024                                       ' Mark Variable Size
  39.        
  40.         '------------------------------------------------------------
  41.         ' Retrieve Registry Key Value...
  42.         '------------------------------------------------------------
  43.         rc = RegQueryValueEx(hKey, SubKeyRef, 0, KeyValType, tmpVal, KeyValSize)    ' Get/Create Key Value
  44.                                                
  45.         If (rc <> ERROR_SUCCESS) Then GoTo GetKeyError          ' Handle Errors
  46.        
  47.         If (Asc(Mid(tmpVal, KeyValSize, 1)) = 0) Then           ' Win95 Adds Null Terminated String...
  48.                 tmpVal = Left(tmpVal, KeyValSize - 1)               ' Null Found, Extract From String
  49.         Else                                                    ' WinNT Does NOT Null Terminate String...
  50.                 tmpVal = Left(tmpVal, KeyValSize)                   ' Null Not Found, Extract String Only
  51.         End If
  52.         '------------------------------------------------------------
  53.         ' Determine Key Value Type For Conversion...
  54.         '------------------------------------------------------------
  55.         Select Case KeyValType                                  ' Search Data Types...
  56.         Case REG_SZ                                             ' String Registry Key Data Type
  57.                 KeyVal = tmpVal                                     ' Copy String Value
  58.         Case REG_DWORD                                          ' Double Word Registry Key Data Type
  59.                 For i = Len(tmpVal) To 1 Step -1                    ' Convert Each Bit
  60.                         KeyVal = KeyVal + Hex(Asc(Mid(tmpVal, i, 1)))   ' Build Value Char. By Char.
  61.                 Next
  62.                 KeyVal = Format$("&h" + KeyVal)                     ' Convert Double Word To String
  63.         End Select
  64.        
  65.         GetKeyValue = True                                      ' Return Success
  66.         rc = RegCloseKey(hKey)                                  ' Close Registry Key
  67.         Exit Function                                           ' Exit
  68.        
  69. GetKeyError:    ' Cleanup After An Error Has Occured...
  70.         KeyVal = ""                                             ' Set Return Val To Empty String
  71.         GetKeyValue = False                                     ' Return Failure
  72.         rc = RegCloseKey(hKey)                                  ' Close Registry Key
  73. End Function
  74. Public Function CreateNewKey( _
  75.                                 sNewKeyName As String, _
  76.                                 lPredefinedKey As Long _
  77.                                 ) As Boolean
  78.     Dim hNewKey As Long
  79.     Dim lRetVal As Long
  80.    
  81.     lRetVal = RegCreateKeyEx(lPredefinedKey, sNewKeyName, 0&, _
  82.                 vbNullString, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, _
  83.                 0&, hNewKey, lRetVal)
  84.     If (lRetVal <> ERROR_SUCCESS) Then GoTo CreateKeyError
  85.     RegCloseKey (hNewKey)
  86.     CreateNewKey = True
  87.     Exit Function
  88. CreateKeyError:
  89.     CreateNewKey = False
  90.     Exit Function
  91. End Function
  92. Public Function SetKeyValue( _
  93.                                 sKeyName As String, _
  94.                                 lPredefinedKey As Long, _
  95.                                 sValueName As String, _
  96.                                 vValueSetting As Variant, _
  97.                                 lValueType As Long _
  98.                                 ) As Boolean
  99.     Dim lRetVal As Long
  100.     Dim hKey As Long
  101.    
  102.     lRetVal = RegOpenKeyEx(lPredefinedKey, sKeyName, 0, KEY_ALL_ACCESS, hKey)
  103.     If (lRetVal <> ERROR_SUCCESS) Then GoTo SetKeyError
  104.     lRetVal = SetValueEx(hKey, sValueName, lValueType, vValueSetting)
  105.     If (lRetVal <> ERROR_SUCCESS) Then GoTo SetKeyError
  106.     RegCloseKey (hKey)
  107.     SetKeyValue = True
  108.     Exit Function
  109.    
  110. SetKeyError:
  111.     SetKeyValue = False
  112.     Exit Function
  113. End Function
  114. Private Function SetValueEx( _
  115.                                 ByVal hKey As Long, _
  116.                                 sValueName As String, _
  117.                                 lType As Long, _
  118.                                 vValue As Variant _
  119.                                 ) As Long
  120.     Dim lValue As Long
  121.     Dim sValue As String
  122.    
  123.     Select Case lType
  124.         Case REG_SZ
  125.             sValue = vValue & Chr$(0)
  126.             SetValueEx = RegSetValueExString(hKey, sValueName, 0&, lType, sValue, Len(sValue))
  127.         Case REG_DWORD
  128.             lValue = vValue
  129.             SetValueEx = RegSetValueExLong(hKey, sValueName, 0&, lType, lValue, 4)
  130.     End Select
  131. End Function

 

[jfdsdjhfuetppo]--Message édité par Guru--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 30-03-2002 à 21:15:31    

se serai sympa guru
de mon coté j'ai trouvé VB5 mais je m'en suis jamais trop servi, mais il n'y a plus que cela j'y arriverai...

Reply

Marsh Posté le 30-03-2002 à 21:17:10    

Guru sans vouloir abuser tu peux me donner 2 mots d'explication sur le listing SVP

Reply

Marsh Posté le 30-03-2002 à 21:36:50    

Ce bout de code contient des déclarations ainsi que 3 fonctions utilisables (celles déclarées Public). Dans le cas qui t'interesse, fixer la valeur d'une clé existante, c'est la fonction SetKeyValue que tu vas utiliser. Les paramètres a passer sont :
- le nom de la clé : il s'agit du chemin complet jusqu'a la valeur par exemple Software\Microsoft\Windows\CurrentVersion\Run
- l'identifiant de la ruche dans laquelle la valeur se trouve par exemple HKEY_LOCAL_MACHINE
- le nom de la valeur par exemple MonProg
- la valeur de cette clé par exemple monprog.exe
- le type de valeur il s'agit soit de REG_SZ pour une chaine ou REG_DWORD pour un nombre sur 32 bits par exemple REG_SZ
 
L'exemple ci dessus créera une clé "MonProg" ayant pour valeur "monprog.exe" sous la clé HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

 

[jfdsdjhfuetppo]--Message édité par Guru--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 30-03-2002 à 21:41:15    

Ok je déconnect, je regarde tranquille demain et je te tiens au courant
 
Merci

Reply

Marsh Posté le 30-03-2002 à 21:41:15   

Reply

Marsh Posté le 30-03-2002 à 21:45:22    

De rien bon courage...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed