Aller au contenu

Messages recommandés

Posté(e)

Salut,

Dans la base de registre, il est possible d'écrire directement des valeurs nommé "Valeur de Chaine Multiple" (type "REG_MULTI_SZ")

Quand on veux lire ces valeurs, pas de problème, cela nous est retourné en liste du genre

 

(7 "toto" "tata" "tutu")

Le "7" devant être un code spécifiant le type de valeur j'imagine.

 

Pour en créer... vl-registry-write ne fontionne pas si je veux lui rentrer une liste de la forme précédente (7 "toto" "tata" "tutu")

 

Y a t'il une solution ?

(à part ne pas passer par la BR)

 

merci.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

SAlut bred,

 

J'aime pas trop aller mettre des cochonneries dans la base de registres (ce qui m'énervent

toujours ce sont les programmes que t'installe, qui bourre la BR mais ne la vide pas lors

de la dés-installation)

 

Lorsque j'ai voulu essayer, j'ai plutôt utilisé setenv et getenv, le seul défaut et qu'il faut mettre

tes données sous forme de chaine de caractères:

(setq data '("tata" "toto" "titi"))
(setenv "MES_DONNEES" data)
; erreur: type d'argument incorrect: stringp ("tata" "toto" "titi")

(setenv "MES_DONNEES" (to_string data))

 

la fonction to_string est une fonction perso qui peut être complétée:

;----------------------------------;
; nom: to_string                   ;
; role: renvoie msg sous forme de  ;
;       chaine de caractères       ;
; param: msg => message à convertir;
; retour: chaine de caractères     ;
; date: 26/02/2008                 ;
; BLAES Sébastien                  ;
;----------------------------------;
(defun to_string( msg / res cpt lg)
 	(cond
  	((= msg nil)
	 	(setq res "")
	)
  	((= (type msg) 'REAL)
	 	(setq res (rtos msg 2 2))
	)
	((= (type msg) 'INT)
	 	(setq res (itoa msg))
	)
	((= (type msg) 'LIST)
	 	(setq cpt 0 lg (length msg) res (strcat "(" (to_string (nth cpt msg))) cpt (1+ cpt))
	 	(while (< cpt lg)
		  	 (setq res (strcat res " " (to_string (nth cpt msg))) cpt (1+ cpt))
		) ; while
	 	(setq res (strcat res ")"))
	)
	((= (type msg) 'STR)
	 	(setq res (strcat "\"" msg "\""))
	)

	; si autre type on renvoie ""
	(t
	 	(setq res "")
	)
) ; cond

 	res
) ; to_string

 

Si je peux, je vais faire un tour du coté de chez swan, pardon de vl-registry :)

 

a+

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut,

 

Ça me rassure de voir que je ne suis pas le seul à ré-écrire des fonctions qui existent déjà :P

 

La fonction prédéfinie vl-princ-to-string fait en gros le même boulot, j'avais écrit princ-to-string ici.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut (gile),

Ça me rassure de voir que je ne suis pas le seul à ré-écrire des fonctions qui existent déjà

 

La fonction prédéfinie vl-princ-to-string fait en gros le même boulot, j'avais écrit princ-to-string ici.

 

Oupss, disons que les fonctions vl- je n'y fais pas trop attention. Et j'ai toujours tendance à écrire mes propres fonctions. Maintenant je le sais qu'il y a une fonction vl, qui est surement plus rapide

que la mienne.

 

 

Pour bred: vl-registry apparement demande un string, donc normal que (7 "toto" "tata" "titi") ne fonctionne pas.

 

(vl-registry-write reg-key [val-name val-data])

Arguments

 

reg-key

A string specifying a Windows registry key.

 

NoteYou cannot use vl-registry-write for HKEY_USERS or KEY_LOCAL_MACHINE.

val-name

A string containing the value of a registry entry.

 

val-data

A string containing registry data.

 

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut,

merci pour ta réponse bseb67, mais ce n'est pas ce que je veux.

 

Et qui plus est il s'avers que vl-registry-write accepte aussi les réel (malgré ce que l'aide affirme).

(vl-registry-write "HKEY_CURRENT_USER\\Software\\Test" "liste" 1)

 

Par contre, si l'on écris une valeurs nommé "Valeur de Chaine Multiple" (type "REG_MULTI_SZ") directement dans la BR, on peux le lire avec vl-registry-read... cela nous retourne une liste sous la forme (7 "toto" "tata" "tutu")... malgré ce que nous dit l'aide aussi !

 

Return Values

 

A string containing registry data, if successful; otherwise nil.

 

 

... d'où ma demande pour savoir si il n'y a pas un moyen de contourner ça, afin de rentrer une valeur "de chaine Multiple".

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Re,

 

je pense que la fonction read est plus souple que la write,

read peut lire toute forme de clé, mais la write demande forcément un string ou un nombre

tiens les réels ca marchent pas:

(vl-registry-write "HKEY_CURRENT_USER\\Software\\Test" "liste6" 1.0)

; erreur: valeur d'argument incorrecte: valeur de registre non prise en charge:

 

Si tu veux mettre des suites de string, je pense que la seule solution c'est de faire celle

que j'ai donnée avant: faire une liste avec tes string, la convertir en string, la stocker dans la BR.

 

Voilà encore un point qui titille mes neurones de la non sympathie:

je déteste quand tu peux faire des choses dans un sens, mais que t'es limité dans l'autre. :mad:

 

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Tiens encore plus bizarre, utilisant la bibliothèque doslib,

j'ai regardé dedans, il y a des fonctions pour la BR.

 

Il y a une fonction: dos_reggettype qui renvoi un entier, et la valeur 7 correspond à:

Returns

An integer identifying the data type if successful. Possible values include:

0

REG_NONE

No value type

 

1

REG_SZ

Unicode null terminated string

 

2

REG_EXPAND_SZ

Unicode nul terminated string (with environment variable references)

 

3

REG_BINARY

Free form binary

 

4

REG_DWORD

32-bit number

 

4

REG_DWORD_LITTLE_ENDIAN

32-bit number (same as REG_DWORD)

 

5

REG_DWORD_BIG_ENDIAN

32-bit number

 

6

REG_LINK

Symbolic Link (unicode)

 

7

REG_MULTI_SZ

Multiple Unicode strings

 

8

REG_RESOURCE_LIST

Resource list in the resource map

 

9

REG_FULL_RESOURCE_DESCRIPTOR

Resource list in the hardware description

 

10

REG_RESOURCE_REQUIREMENTS_LIST

Reserved

 

11

REG_QWORD

64-bit number

 

11

REG_QWORD_LITTLE_ENDIAN

64-bit number (same as REG_QWORD)

 

Tiens c'est bien une REG_MULTI_SZ.

 

(dos_reggettype "HKEY_CURRENT_USER" "Software\\Test" "liste2")

7 => ok

 

par contre, le get ne marche pas :(

(vl-registry-read "HKEY_CURRENT_USER\\Software\\Test" "liste2")

(7 "tata" "totot" "titi") => ok

 

(dos_regget "HKEY_CURRENT_USER\\Software\\Test" "liste2")

nil => :o

 

Bon, faut que je retourne à mes moutons, sinon gare aux patrons !

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)
Si tu veux mettre des suites de string, je pense que la seule solution c'est de faire celle

que j'ai donnée avant: faire une liste avec tes string, la convertir en string, la stocker dans la BR.

C'est bien sur au final ce que je fais...

Mais si je pouvais faire autrement, ça m'arrangerais....

 

(Si vous suivez tous les messages, vous aurez compris que ma demande suivante en découle....)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut

 

Tu as regardé du coté des activex ?

Par exemple

(setq wsh (vlax-create-object "WScript.Shell"))
(setq cle "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\Patrick_35\\Test0")
(vlax-invoke-method wsh 'RegWrite cle 15 "REG_DWORD") ; écrire dans les registres
(vlax-invoke wsh 'RegRead cle) ; lecture dans les registres
(vlax-invoke-method wsh 'RegWrite cle "toto" "REG_SZ")
(vlax-invoke wsh 'RegRead cle)
(vlax-invoke wsh 'RegDelete cle) ; effacer la clé dans les registres
(vlax-release-object wsh)

Je n'ai pas trouvé pour une liste et je n'ai pas trop le temps de chercher, mais c'est une piste.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut,

Non, je n'y avais pas pensé.

Mais je n'arrive pas à faire grand chose : j'arrives à lire aussi une valeur "REG_MULTI_SZ" (mais cette fois-ci sous forme de liste : ("tata" "toto" "tutu")

 

Par contre, je n'arrive pas à en écrire...

 

[Edité le 1/7/2008 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

  • 5 mois après...
Posté(e)

Merci (gile) !

je n'ai pas encore testé, mais ça à l'air d'être bien !

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité