OVH Cloud OVH Cloud

URGENT cle reg_binary

3 réponses
Avatar
Sylvain
Salut a tous

j'ai une cle de registre a cr=E9er (voici la ligne):

WshShell.RegWrite "HKLM\SYSTEM\CurrentControlSet\Control\K
eyboard Layout\Scancode=20
Map","00000000000000000300000038001d0038001de000000000","R
EG_BINARY"

et voici le message d'erreur :
U:\Untitled1.vbs(15, 117) Erreur de compilation Microsoft=20
VBScript: Fin d'instruction attendue

Une id=E9e ?

3 réponses

Avatar
Jean-Claude BELLAMY
Dans le message news:15a001c46f30$2d3ea4d0$ ,
Sylvain s'est ainsi exprimé:

Salut a tous

j'ai une cle de registre a créer (voici la ligne):

WshShell.RegWrite "HKLMSYSTEMCurrentControlSetControlK
eyboard LayoutScancode
Map","00000000000000000300000038001d0038001de000000000","R
EG_BINARY"

et voici le message d'erreur :
U:Untitled1.vbs(15, 117) Erreur de compilation Microsoft
VBScript: Fin d'instruction attendue

Une idée ?


Oui : c'est simple, on ne peut pas lire ou écrire des REG_BINARY de plus de
1 octet en VBS "de base" !

De plus, tu a commis une erreur de syntaxe :
WshShell.RegWrite "HKLM....Map","00..00","REG_BINARY"
La valeur dans le cas de reg_binary étant obligatoirement un entier, ce ne
peut pas être une chaine !
WshShell.RegWrite "HKLM....Map",0,"REG_BINARY"


Et si tu veux transmettre des REG_BINARY de plus de 1 octet, tu DOIS
OBLIGATOIREMENT passer par autre chose, en particulier la classe
"StdRegProv" de WMI, et la méthode "SetBinaryValue" :

Exemple :
---------

const HKLM = &H80000002
Const REG_BINARY = 3
Tab= array( _
&H00, &H00, &H00, &H00, &H00, &H00, &H00, &H00, _
&H03, &H00, &H00, &H00, &H38, &H00, &H1d, &H00, _
&H38, &H00, &H1d, &He0, &H00, &H00, &H00, &H00)

strComputer = "."
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!" & _
strComputer & "rootdefault:StdRegProv")

KeyName="SYSTEMCurrentControlSetControlKeyboard Layout"
ValueName="Scancode Map"
oReg.SetBinaryValue HKLM, KeyName,ValueName,Tab


NB: je n'ai fais aucun test de validité.
A toi de peaufiner tout çà ...


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *


Avatar
scraper
Salut à Jean-Claude BELLAMY qui dans son post
news:
nous a écrit/répondu :


Et si tu veux transmettre des REG_BINARY de plus de 1 octet, tu DOIS
OBLIGATOIREMENT passer par autre chose, en particulier la classe
"StdRegProv" de WMI, et la méthode "SetBinaryValue" :

si l'ordi hôte n'a pas WMI installé, une solution donnée par Jean (et qui

fonctione ma foi plutôt bien :-) :

créer un fichier reg temporaire
le faire exécuter par le script
le détruire



--

Attention ! Adresse mail invalide ...
Pour me contacter, cliquez sur le lien ci-dessous:
http://scraper.chez.tiscali.fr/contact.htm

scraper

Avatar
Jean-Claude BELLAMY
Dans le message news:% ,
scraper s'est ainsi exprimé:

Salut à Jean-Claude BELLAMY qui dans son post
news:
nous a écrit/répondu :


Et si tu veux transmettre des REG_BINARY de plus de 1 octet, tu DOIS
OBLIGATOIREMENT passer par autre chose, en particulier la classe
"StdRegProv" de WMI, et la méthode "SetBinaryValue" :

si l'ordi hôte n'a pas WMI installé,

Si WMI n'est pas installé d'origine, cela signifie que l'on est sous

Win95/98 ou NT4
C'est quand même de plus en plus rare...

une solution donnée par Jean (et
qui fonctione ma foi plutôt bien :-) :

créer un fichier reg temporaire
le faire exécuter par le script
le détruire


Oui, tu as raison de le rappeler, je pratique aussi cette méthode, mais
c'est un peu galère que le codage Binaire -> chaines hexadécimal dans un
.REG

J'ai d'ailleurs écrit deux fonctions qui retournent la chaine complète à
écrire dans le .REG à partir du nom de la valeur et , au choix :
- d'un tableau d'octets
- d'une chaine unique en hexadécimal


------------ couper ici ------------
function BinaryValueFromArray(Name,ValueArray)
str=chr(34) & Name & chr(34) & "=hex:" & VBCRLF
line=""
lmax=Ubound(ValueArray)
For i = 0 To lmax
c=ValueArray(i)
If line<>"" Then line=line & ","
hc=Hex(c)
If c<&H10 Then hc="0" & hc
line=line & hc
If len(line)>v or i=lmax Then
If i<lmax Then line=line & ","
str=str & line & VBCRLF
line=""
End If
Next
BinaryValueFromArray=str
end function

function BinaryValueFromString(Name,HexStr)
str=chr(34) & Name & chr(34) & "=hex:" & VBCRLF
line=""
lmax=int(len(HexStr)/2)
If lmax*2<>len(HexStr) Then
wscript.echo "La longueur de la chaine doit être paire"
wscript.quit
End If
For i = 1 To lmax
hc=mid(HexStr,i*2-1,2)
If line<>"" Then line=line & ","
line=line & hc
If len(line)>v or i=lmax Then
If i<lmax Then line=line & ","
str=str & line & VBCRLF
line=""
End If
Next
BinaryValueFromString=str
end function
------------ couper ici ------------



--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *