OVH Cloud OVH Cloud

API RegSetValueEx

4 réponses
Avatar
Mikel83
Bonsoir!

J'essaye de modifier la clé HKEY_CURRENT_USER\Control Panel\International
pour fixer la valeur sDecimal à ".".
Je lis correctement la valeur avec RegQueryValueEx, et si elle n'est pas
égale à "." je souhaite lui affecter cette valeur en utilisant le code
suivant:
TailleBuffer = 2
Donnee = "."
Resultat = RegSetValueEx(Ident, "sDecimal", 0&, REG_SZ, Donnee, TailleBuffer)

L'API fonctionne, mais la valeur finale contient des caractères
"chinois"........
Je dois oublier une conversion?????
Merci pour vos suggestions...

--
Cordialement, Mikel

4 réponses

Avatar
Jacques93
Bonjour Mikel83,
Mikel83 a écrit :
Bonsoir!

J'essaye de modifier la clé HKEY_CURRENT_USERControl PanelInternational
pour fixer la valeur sDecimal à ".".
Je lis correctement la valeur avec RegQueryValueEx, et si elle n'est pas
égale à "." je souhaite lui affecter cette valeur en utilisant le code
suivant:
TailleBuffer = 2
Donnee = "."
Resultat = RegSetValueEx(Ident, "sDecimal", 0&, REG_SZ, Donnee, TailleBuffer)

L'API fonctionne, mais la valeur finale contient des caractères
"chinois"........
Je dois oublier une conversion?????
Merci pour vos suggestions...




Pour avoir une idée de l'origine de l'erreur, il faudrait que l'on voit
comment sont déclaréees l'API RegSetValueEx, et les variables
TailleBuffer et Donnee

--
Cordialement,

Jacques.
Avatar
Mikel83
Voici les déclarations:

Public 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
...............................................
Dim Resultat As Long, Ident As Long, TailleBuffer As Long
Dim Donnee As String


--
Cordialement, Mikel


"Jacques93" a écrit :

Bonjour Mikel83,
Mikel83 a écrit :
> Bonsoir!
>
> J'essaye de modifier la clé HKEY_CURRENT_USERControl PanelInternational
> pour fixer la valeur sDecimal à ".".
> Je lis correctement la valeur avec RegQueryValueEx, et si elle n'est pas
> égale à "." je souhaite lui affecter cette valeur en utilisant le code
> suivant:
> TailleBuffer = 2
> Donnee = "."
> Resultat = RegSetValueEx(Ident, "sDecimal", 0&, REG_SZ, Donnee, TailleBuffer)
>
> L'API fonctionne, mais la valeur finale contient des caractères
> "chinois"........
> Je dois oublier une conversion?????
> Merci pour vos suggestions...
>

Pour avoir une idée de l'origine de l'erreur, il faudrait que l'on voit
comment sont déclaréees l'API RegSetValueEx, et les variables
TailleBuffer et Donnee

--
Cordialement,

Jacques.



Avatar
Jacques93
Bonjour Mikel83
Mikel83 a écrit :
Voici les déclarations:

Public 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
................................................
Dim Resultat As Long, Ident As Long, TailleBuffer As Long
Dim Donnee As String





Essaie :

Donnee = "."
Resultat = RegSetValueEx(Ident, "sDecimal", 0&, REG_SZ, _
ByVal Donnee, Len(Donnee))


Pour infos, il y a des APIs spécialisées pour les paramètres
internationaux :

Private Declare Function GetLocaleInfo Lib "kernel32" Alias _
"GetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String, _
ByVal cchData As Long) As Long

Private Declare Function SetLocaleInfo Lib "kernel32" Alias _
"SetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String) As Long

Private Const LOCALE_SYSTEM_DEFAULT = &H400
Private Const LOCALE_USER_DEFAULT = &H800
Private Const LOCALE_ICOUNTRY = &H5
Private Const LOCALE_SCOUNTRY = &H6
Private Const LOCALE_SSHORTDATE = &H1F
Private Const LOCALE_SLONGDATE = &H20
Private Const LOCALE_SDECIMAL = &HE

...
Dim sDec As String
Dim lResult As Long

sDec = Space(16)
lResult = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, _
sDec, Len(sDec))
If lResult > 0 Then
sDec = Left(sDec, lResult - 1)
MsgBox sDec
End If
sDec = "."
lResult = SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, sDec)


--
Cordialement,

Jacques.
Avatar
Mikel83
OK, ça fonctionne avec cette syntaxe!
Merci pour ton aide et pour tes conseils complémentaires.
--
Cordialement, Mikel


"Jacques93" a écrit :

Bonjour Mikel83
Mikel83 a écrit :
> Voici les déclarations:
>
> Public 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
> ................................................
> Dim Resultat As Long, Ident As Long, TailleBuffer As Long
> Dim Donnee As String
>
>

Essaie :

Donnee = "."
Resultat = RegSetValueEx(Ident, "sDecimal", 0&, REG_SZ, _
ByVal Donnee, Len(Donnee))


Pour infos, il y a des APIs spécialisées pour les paramètres
internationaux :

Private Declare Function GetLocaleInfo Lib "kernel32" Alias _
"GetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String, _
ByVal cchData As Long) As Long

Private Declare Function SetLocaleInfo Lib "kernel32" Alias _
"SetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal lpLCData As String) As Long

Private Const LOCALE_SYSTEM_DEFAULT = &H400
Private Const LOCALE_USER_DEFAULT = &H800
Private Const LOCALE_ICOUNTRY = &H5
Private Const LOCALE_SCOUNTRY = &H6
Private Const LOCALE_SSHORTDATE = &H1F
Private Const LOCALE_SLONGDATE = &H20
Private Const LOCALE_SDECIMAL = &HE

....
Dim sDec As String
Dim lResult As Long

sDec = Space(16)
lResult = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, _
sDec, Len(sDec))
If lResult > 0 Then
sDec = Left(sDec, lResult - 1)
MsgBox sDec
End If
sDec = "."
lResult = SetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, sDec)


--
Cordialement,

Jacques.