Forum Clubic

VBA Access et modif registre - Problème avec les DWORD

Bonjour!
Voila ,je developppe une application en vba access , et je doit modifier 2 clés dans le registre windows! j’arrive a modifier l’enregestrement de type REG_SZ, mais j’ai un problème avec le type DWORD!
Bon j’explique

je veux mettre du texte dans l’enregistremetn LastFax de type REG_SZ, et je veu faire passer l’enregistrement AutoSend de 0x00000000 à 0x00000001 (de type REG_DWORD !

j’ouvre d’abord ma clé en faisant cette api :
RegCreateKey (HKEY_CURRENT_USER, “software\macle”, handle)

Ensuite je met le numero de tel dans LastFax:
RegSetValueEx (handle, "LastFax", 0, REG_SZ, montel, Clng(Len(montel))+1))

(montel est une variable de mon formulaire), Jusque la sa fonctionnement parfaitement!

Là où ça se complique c’est ici :
RegSetValueEx (Handle, “AutoSend”, 0, REG_DWORD, “1”, 4)
Nomalement ça devrait mettre 0x00000000 à 0x00000001 pour l’enregistrement AutoSend! Seulement ça le met à 0x00000031 0_0!!
Inutile de vous preciser que j’ait tout essayer au niveau du 1 (de le mettre en hexa: &01, avec et sans guillemet, etc… )

Si quelqu’un connait l’astuce pour pouvoir mettre ce fichu enregistrement DWORD à 1 , ça m’arrangerait ! merci :slight_smile:

essaie en déclarant des longs pour tes valeurs :
RegSetValueEx Handle, "AutoSend", 0&, REG_DWORD, 1&, 4

pour les parenthèses, je te laisse le soin de décider si tu en mets ou non, ca dépend du contexte

non , ça ne marche pas avec des long (ça ne créer meme pas la cllé :frowning: )
et si je laisse declaré en string

Option Compare Database

Option Explicit

Const KEY_ALL_ACCESS = &HF003F
Const HKEY_CURRENT_USER = &H80000001
Const REG_DWORD As Long = 4

'On déclare nos API : RegOpenKeyEx, RegSetValueEx, RegCloseKey.
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 RegSetValueEx Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal szData As Long, ByVal cbData As Long) As Long

Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long

Private Sub Commande0_Click()
Dim Handle As Long
Dim Test As Long

'On ouvre une clé de la base de registre
If RegOpenKeyEx(HKEY_CURRENT_USER, "Software\test\test", 0, KEY_ALL_ACCESS, Handle) = 0 Then

Test = RegSetValueEx(Handle, "AutoSend", 0&, REG_DWORD, 1&, 4)

'On ferme la clé que l'on a ouvert
RegCloseKey (Handle)
End If
End Sub

ça ne marche pas !
Par contre si je declare l’avant dernier parametre dur regsetvalueex en String , sa ecrit dans le registre , mais ça me met 0x00000031 au lieu de 0x0000001 -_-

Tu as une déclaration bizarre pour RegSetValueEx
Essaie avec celle-ci;

Private 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

ça marche , merci beaucoup ! J’ai trouvé pourrquoi ça ne marchait pas grace a toi :smiley:
Dans le RegSetValueEx, à l’avant dernier paramètre, j’avais tester avec : " ByVal szData As Long" et aussi avec “ByVal szData As Any” !!! et aucun ne marchait !
Il fallait que je le mette en Any et en enlevant le ByVal :ane:
merci :love:

En principe, les Declare, on n’y touche pas ;
Sinon, les valeurs des longs peuvent bien être rentrés sous la forme 1 ou 1&, c’est indifférent, mais pas “1”.