j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y
prendre comme un manche car je n'arrive pas au résultat escompté
voici un code vbs qui fonctionne parfaitement
Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows
NT\CurrentVersion\DigitalProductId"))
Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function
c'est la fonction de conversion que je n'arrive pas à traduire
la valeur du paramètre "key" je peux soit avoir une chaine hexa, un
tableau hexa, un tableau d'entier je ne sais pas ce que renvoi la
fonction vbs "regread" pour un "reg_binary"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
JeAn-PhI
JeAn-PhI a émis l'idée suivante :
bonjour
je souhaite convertir une chaine hexa en base 24.
j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre comme un manche car je n'arrive pas au résultat escompté
voici un code vbs qui fonctionne parfaitement
Set WshShell = CreateObject("WScript.Shell") MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionDigitalProductId"))
Function ConvertToKey(Key) Const KeyOffset = 52 i = 28 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 x = 14 Do Cur = Cur * 256 Cur = Key(x + KeyOffset) + Cur Key(x + KeyOffset) = (Cur 24) And 255 Cur = Cur Mod 24 x = x -1 Loop While x >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput If (((29 - i) Mod 6) = 0) And (i <> -1) Then i = i -1 KeyOutput = "-" & KeyOutput End If Loop While i >= 0 ConvertToKey = KeyOutput End Function
c'est la fonction de conversion que je n'arrive pas à traduire
la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs "regread" pour un "reg_binary"
j'aimerais éviter d'utiliser du vbs
merci
voici la réponse : szScriptVBS est une chaîne autScriptVBS est un objet Automation "MSScriptControl.ScriptControl"
szScriptVBS = [ FUNCTION ConvertToKey(ArchOs) Const HKLM = &H80000002 Arch_OS = ArchOS Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet") Select CASE Arch_OS CASE "32", "" objCtx.Add "__ProviderArchitecture", 32 CASE "64" objCtx.Add "__ProviderArchitecture", 64 END Select Set objLocator = CreateObject("Wbemscripting.SWbemLocator") Set objServices = objLocator.ConnectServer(strComputer,"rootdefault","","",,,,objCtx) Set objStdRegProv = objServices.Get("StdRegProv") Set Inparams = objStdRegProv.Methods_("GetBinaryValue").Inparameters Inparams.Hdefkey = HKLM Inparams.Ssubkeyname = "SOFTWAREMicrosoftWindows NTCurrentVersion" Inparams.Svaluename = "DigitalProductId" Set Outparams = objStdRegProv.ExecMethod_("GetBinaryValue", Inparams,,objCtx) Key = Outparams.uValue Const KeyOffset = 52 i = 28 Chars = "BCDFGHJKMPQRTVWXY2346789" DO Cur = 0 x = 14 DO Cur = Cur * 256 Cur = Key(x + KeyOffset) + Cur Key(x + KeyOffset) = (Cur 24) AND 255 Cur = Cur Mod 24 x = x -1 LOOP WHILE x >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput IF (((29 - i) Mod 6) = 0) AND (i <> -1) THEN i = i -1 KeyOutput = "-" & KeyOutput END IF LOOP WHILE i >= 0 ConvertToKey = KeyOutput END FUNCTION ] szArchOS est une chaîne = SysVersionWindows(sysProcesseur)
autScriptVBS>>Language("VBScript") autScriptVBS>>Reset autScriptVBS>>AddCode(szScriptVBS) autScriptVBS>>Timeout(-1) szKey est chaîne = autScriptVBS>>Run("ConvertToKey",szArchOS) Info(szKey)
-- Cordialement JeAn-PhI
JeAn-PhI a émis l'idée suivante :
bonjour
je souhaite convertir une chaine hexa en base 24.
j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre
comme un manche car je n'arrive pas au résultat escompté
voici un code vbs qui fonctionne parfaitement
Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows
NTCurrentVersionDigitalProductId"))
Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function
c'est la fonction de conversion que je n'arrive pas à traduire
la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau
hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs
"regread" pour un "reg_binary"
j'aimerais éviter d'utiliser du vbs
merci
voici la réponse :
szScriptVBS est une chaîne
autScriptVBS est un objet Automation
"MSScriptControl.ScriptControl"
szScriptVBS = [
FUNCTION ConvertToKey(ArchOs)
Const HKLM = &H80000002
Arch_OS = ArchOS
Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
Select CASE Arch_OS
CASE "32", ""
objCtx.Add "__ProviderArchitecture", 32
CASE "64"
objCtx.Add "__ProviderArchitecture", 64
END Select
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
Set objServices =
objLocator.ConnectServer(strComputer,"rootdefault","","",,,,objCtx)
Set objStdRegProv = objServices.Get("StdRegProv")
Set Inparams =
objStdRegProv.Methods_("GetBinaryValue").Inparameters
Inparams.Hdefkey = HKLM
Inparams.Ssubkeyname = "SOFTWAREMicrosoftWindows
NTCurrentVersion"
Inparams.Svaluename = "DigitalProductId"
Set Outparams = objStdRegProv.ExecMethod_("GetBinaryValue",
Inparams,,objCtx)
Key = Outparams.uValue
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
DO
Cur = 0
x = 14
DO
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur 24) AND 255
Cur = Cur Mod 24
x = x -1
LOOP WHILE x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
IF (((29 - i) Mod 6) = 0) AND (i <> -1) THEN
i = i -1
KeyOutput = "-" & KeyOutput
END IF
LOOP WHILE i >= 0
ConvertToKey = KeyOutput
END FUNCTION
]
szArchOS est une chaîne = SysVersionWindows(sysProcesseur)
autScriptVBS>>Language("VBScript")
autScriptVBS>>Reset
autScriptVBS>>AddCode(szScriptVBS)
autScriptVBS>>Timeout(-1)
szKey est chaîne = autScriptVBS>>Run("ConvertToKey",szArchOS)
Info(szKey)
j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre comme un manche car je n'arrive pas au résultat escompté
voici un code vbs qui fonctionne parfaitement
Set WshShell = CreateObject("WScript.Shell") MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionDigitalProductId"))
Function ConvertToKey(Key) Const KeyOffset = 52 i = 28 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 x = 14 Do Cur = Cur * 256 Cur = Key(x + KeyOffset) + Cur Key(x + KeyOffset) = (Cur 24) And 255 Cur = Cur Mod 24 x = x -1 Loop While x >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput If (((29 - i) Mod 6) = 0) And (i <> -1) Then i = i -1 KeyOutput = "-" & KeyOutput End If Loop While i >= 0 ConvertToKey = KeyOutput End Function
c'est la fonction de conversion que je n'arrive pas à traduire
la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs "regread" pour un "reg_binary"
j'aimerais éviter d'utiliser du vbs
merci
voici la réponse : szScriptVBS est une chaîne autScriptVBS est un objet Automation "MSScriptControl.ScriptControl"
szScriptVBS = [ FUNCTION ConvertToKey(ArchOs) Const HKLM = &H80000002 Arch_OS = ArchOS Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet") Select CASE Arch_OS CASE "32", "" objCtx.Add "__ProviderArchitecture", 32 CASE "64" objCtx.Add "__ProviderArchitecture", 64 END Select Set objLocator = CreateObject("Wbemscripting.SWbemLocator") Set objServices = objLocator.ConnectServer(strComputer,"rootdefault","","",,,,objCtx) Set objStdRegProv = objServices.Get("StdRegProv") Set Inparams = objStdRegProv.Methods_("GetBinaryValue").Inparameters Inparams.Hdefkey = HKLM Inparams.Ssubkeyname = "SOFTWAREMicrosoftWindows NTCurrentVersion" Inparams.Svaluename = "DigitalProductId" Set Outparams = objStdRegProv.ExecMethod_("GetBinaryValue", Inparams,,objCtx) Key = Outparams.uValue Const KeyOffset = 52 i = 28 Chars = "BCDFGHJKMPQRTVWXY2346789" DO Cur = 0 x = 14 DO Cur = Cur * 256 Cur = Key(x + KeyOffset) + Cur Key(x + KeyOffset) = (Cur 24) AND 255 Cur = Cur Mod 24 x = x -1 LOOP WHILE x >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput IF (((29 - i) Mod 6) = 0) AND (i <> -1) THEN i = i -1 KeyOutput = "-" & KeyOutput END IF LOOP WHILE i >= 0 ConvertToKey = KeyOutput END FUNCTION ] szArchOS est une chaîne = SysVersionWindows(sysProcesseur)
autScriptVBS>>Language("VBScript") autScriptVBS>>Reset autScriptVBS>>AddCode(szScriptVBS) autScriptVBS>>Timeout(-1) szKey est chaîne = autScriptVBS>>Run("ConvertToKey",szArchOS) Info(szKey)
-- Cordialement JeAn-PhI
tt
Le Thu, 19 Jun 2014 15:36:51 +0200, JeAn-PhI a écri t:
JeAn-PhI a émis l'idée suivante :
bonjour
je souhaite convertir une chaine hexa en base 24.
[...]
Bonjour,
Cela fait plus que base 16 -> base 24. Je pense que cela devrait pouvoir sans douleur être fait en WD ? Aurais-je mal compris la question?
-- Thumain Thérèse
Le Thu, 19 Jun 2014 15:36:51 +0200, JeAn-PhI <nospam@nospam.fr> a écri t:
JeAn-PhI a émis l'idée suivante :
bonjour
je souhaite convertir une chaine hexa en base 24.
[...]
Bonjour,
Cela fait plus que base 16 -> base 24. Je pense que cela devrait pouvoir
sans douleur être fait en WD ?
Aurais-je mal compris la question?
d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur internet donne le bon résultat il suffit de faire ensuite le lien entre le résultat et les valeurs possibles
Final Step: Take your base 24 string, and replace the characters like this
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N * | | | | | | | | | | | | | | | | | | | | | | | | B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **
* : le résultat de la conversion ne contient que ces caractères ** : correspondance pour obtenir le résultat final
-- Cordialement JeAn-PhI
tt avait écrit le 19/06/2014 :
Le Thu, 19 Jun 2014 15:36:51 +0200, JeAn-PhI <nospam@nospam.fr> a écrit:
JeAn-PhI a émis l'idée suivante :
bonjour
je souhaite convertir une chaine hexa en base 24.
[...]
Bonjour,
Cela fait plus que base 16 -> base 24. Je pense que cela devrait pouvoir sans
douleur être fait en WD ?
Aurais-je mal compris la question?
non c'est bien un conversion base 16 -> base 24 seulement le resultat
est à choisir parmi la liste :
d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur
internet donne le bon résultat il suffit de faire ensuite le lien entre
le résultat et les valeurs possibles
Final Step:
Take your base 24 string, and replace the characters like this
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N *
| | | | | | | | | | | | | | | | | | | | | | | |
B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **
* : le résultat de la conversion ne contient que ces caractères
** : correspondance pour obtenir le résultat final
d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur internet donne le bon résultat il suffit de faire ensuite le lien entre le résultat et les valeurs possibles
Final Step: Take your base 24 string, and replace the characters like this
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N * | | | | | | | | | | | | | | | | | | | | | | | | B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **
* : le résultat de la conversion ne contient que ces caractères ** : correspondance pour obtenir le résultat final
-- Cordialement JeAn-PhI
JeAn-PhI
JeAn-PhI avait soumis l'idée :
tt avait écrit le 19/06/2014 :
Le Thu, 19 Jun 2014 15:36:51 +0200, JeAn-PhI a écrit:
JeAn-PhI a émis l'idée suivante :
bonjour
je souhaite convertir une chaine hexa en base 24.
[...]
Bonjour,
Cela fait plus que base 16 -> base 24. Je pense que cela devrait pouvoir sans douleur être fait en WD ? Aurais-je mal compris la question?
non c'est bien un conversion base 16 -> base 24 seulement le resultat est à choisir parmi la liste :
d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur internet donne le bon résultat il suffit de faire ensuite le lien entre le résultat et les valeurs possibles
Final Step: Take your base 24 string, and replace the characters like this
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N * | | | | | | | | | | | | | | | | | | | | | | | | B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **
* : le résultat de la conversion ne contient que ces caractères ** : correspondance pour obtenir le résultat final
je rajoute faites le test en utilisant le convertisseur suivant pour l'étape 8 et 9 :
d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur internet
donne le bon résultat il suffit de faire ensuite le lien entre le résultat et
les valeurs possibles
Final Step:
Take your base 24 string, and replace the characters like this
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N *
| | | | | | | | | | | | | | | | | | | | | | | |
B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **
* : le résultat de la conversion ne contient que ces caractères
** : correspondance pour obtenir le résultat final
je rajoute faites le test en utilisant le convertisseur suivant pour
l'étape 8 et 9 :
d'ailleurs n'importe quel convertisseur base 16 en base 24 dispo sur internet donne le bon résultat il suffit de faire ensuite le lien entre le résultat et les valeurs possibles
Final Step: Take your base 24 string, and replace the characters like this
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N * | | | | | | | | | | | | | | | | | | | | | | | | B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9 **
* : le résultat de la conversion ne contient que ces caractères ** : correspondance pour obtenir le résultat final
je rajoute faites le test en utilisant le convertisseur suivant pour l'étape 8 et 9 :
j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre comme un manche car je n'arrive pas au résultat escompté
voici un code vbs qui fonctionne parfaitement
Set WshShell = CreateObject("WScript.Shell") MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionDigitalProductId"))
Function ConvertToKey(Key) Const KeyOffset = 52 i = 28 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 x = 14 Do Cur = Cur * 256 Cur = Key(x + KeyOffset) + Cur Key(x + KeyOffset) = (Cur 24) And 255 Cur = Cur Mod 24 x = x -1 Loop While x >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput If (((29 - i) Mod 6) = 0) And (i <> -1) Then i = i -1 KeyOutput = "-" & KeyOutput End If Loop While i >= 0 ConvertToKey = KeyOutput End Function
c'est la fonction de conversion que je n'arrive pas à traduire
la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs "regread" pour un "reg_binary"
j'aimerais éviter d'utiliser du vbs
merci
voici une autre solution en full WL, merci à Jurassik Pork :
bufBuffer est un Buffer sur 2048 HKEY_LOCAL_MACHINE est un entier = 0x80000002 KEY_QUERY_VALUE est un entier = 0x1 KEY_WOW64_64KEY est un entier = 0x0100 RetourFonction est un entier // Type C :LONG phkResult est un entier système // Type C :PHKEY lpcbData est un entier système lpcbData = 2048 i,j sont des entiers keyStartIndex est un entier = 53 keyEndIndex est un entier = keyStartIndex + 15 decodeLength est un entier = 29 decodeStringLength est un entier = 15 decodedChars est un Buffer sur 29 octets hexPid est un tableau dynamique d' octets digits est un Buffer = "BCDFGHJKMPQRTVWXY2346789"
POUR i = keyStartIndex A keyEndIndex TableauAjoute(hexPid,bufBuffer[[i]]) FIN POUR i = decodeLength A 1 PAS -1
SI (modulo(i,6) = 0) decodedChars[[i]]= Asc("-") SINON digitMapIndex est un entier = 0 POUR j = decodeStringLength A 1 PAS -1 byteValue est un entier = bitDécaleGauche(digitMapIndex,8) | hexPid[j] hexPid[j] = byteValue / 24 digitMapIndex = modulo(byteValue,24) decodedChars[[i]] = digits[[digitMapIndex+1]] FIN FIN FIN
Trace (decodedChars)
-- Cordialement JeAn-PhI
JeAn-PhI avait écrit le 18/06/2014 :
bonjour
je souhaite convertir une chaine hexa en base 24.
j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre
comme un manche car je n'arrive pas au résultat escompté
voici un code vbs qui fonctionne parfaitement
Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows
NTCurrentVersionDigitalProductId"))
Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function
c'est la fonction de conversion que je n'arrive pas à traduire
la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau
hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs
"regread" pour un "reg_binary"
j'aimerais éviter d'utiliser du vbs
merci
voici une autre solution en full WL, merci à Jurassik Pork :
bufBuffer est un Buffer sur 2048
HKEY_LOCAL_MACHINE est un entier = 0x80000002
KEY_QUERY_VALUE est un entier = 0x1
KEY_WOW64_64KEY est un entier = 0x0100
RetourFonction est un entier // Type C :LONG
phkResult est un entier système // Type C :PHKEY
lpcbData est un entier système
lpcbData = 2048
i,j sont des entiers
keyStartIndex est un entier = 53
keyEndIndex est un entier = keyStartIndex + 15
decodeLength est un entier = 29
decodeStringLength est un entier = 15
decodedChars est un Buffer sur 29 octets
hexPid est un tableau dynamique d' octets
digits est un Buffer = "BCDFGHJKMPQRTVWXY2346789"
POUR i = keyStartIndex A keyEndIndex
TableauAjoute(hexPid,bufBuffer[[i]])
FIN
POUR i = decodeLength A 1 PAS -1
SI (modulo(i,6) = 0)
decodedChars[[i]]= Asc("-")
SINON
digitMapIndex est un entier = 0
POUR j = decodeStringLength A 1 PAS -1
byteValue est un entier = bitDécaleGauche(digitMapIndex,8) |
hexPid[j]
hexPid[j] = byteValue / 24
digitMapIndex = modulo(byteValue,24)
decodedChars[[i]] = digits[[digitMapIndex+1]]
FIN
FIN
FIN
j'ai à peu près tout essayer ce que j'ai pu trouver mais je dois m'y prendre comme un manche car je n'arrive pas au résultat escompté
voici un code vbs qui fonctionne parfaitement
Set WshShell = CreateObject("WScript.Shell") MsgBox ConvertToKey(WshShell.RegRead("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionDigitalProductId"))
Function ConvertToKey(Key) Const KeyOffset = 52 i = 28 Chars = "BCDFGHJKMPQRTVWXY2346789" Do Cur = 0 x = 14 Do Cur = Cur * 256 Cur = Key(x + KeyOffset) + Cur Key(x + KeyOffset) = (Cur 24) And 255 Cur = Cur Mod 24 x = x -1 Loop While x >= 0 i = i -1 KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput If (((29 - i) Mod 6) = 0) And (i <> -1) Then i = i -1 KeyOutput = "-" & KeyOutput End If Loop While i >= 0 ConvertToKey = KeyOutput End Function
c'est la fonction de conversion que je n'arrive pas à traduire
la valeur du paramètre "key" je peux soit avoir une chaine hexa, un tableau hexa, un tableau d'entier je ne sais pas ce que renvoi la fonction vbs "regread" pour un "reg_binary"
j'aimerais éviter d'utiliser du vbs
merci
voici une autre solution en full WL, merci à Jurassik Pork :
bufBuffer est un Buffer sur 2048 HKEY_LOCAL_MACHINE est un entier = 0x80000002 KEY_QUERY_VALUE est un entier = 0x1 KEY_WOW64_64KEY est un entier = 0x0100 RetourFonction est un entier // Type C :LONG phkResult est un entier système // Type C :PHKEY lpcbData est un entier système lpcbData = 2048 i,j sont des entiers keyStartIndex est un entier = 53 keyEndIndex est un entier = keyStartIndex + 15 decodeLength est un entier = 29 decodeStringLength est un entier = 15 decodedChars est un Buffer sur 29 octets hexPid est un tableau dynamique d' octets digits est un Buffer = "BCDFGHJKMPQRTVWXY2346789"
POUR i = keyStartIndex A keyEndIndex TableauAjoute(hexPid,bufBuffer[[i]]) FIN POUR i = decodeLength A 1 PAS -1
SI (modulo(i,6) = 0) decodedChars[[i]]= Asc("-") SINON digitMapIndex est un entier = 0 POUR j = decodeStringLength A 1 PAS -1 byteValue est un entier = bitDécaleGauche(digitMapIndex,8) | hexPid[j] hexPid[j] = byteValue / 24 digitMapIndex = modulo(byteValue,24) decodedChars[[i]] = digits[[digitMapIndex+1]] FIN FIN FIN