Bred Posté(e) le 30 juin 2008 Posté(e) le 30 juin 2008 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...
bseb67 Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 SAlut bred, J'aime pas trop aller mettre des cochonneries dans la base de registres (ce qui m'énerventtoujours ce sont les programmes que t'installe, qui bourre la BR mais ne la vide pas lorsde 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 mettretes 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...
(gile) Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 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
bseb67 Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 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 rapideque 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-keyA string specifying a Windows registry key. NoteYou cannot use vl-registry-write for HKEY_USERS or KEY_LOCAL_MACHINE.val-nameA string containing the value of a registry entry. val-dataA string containing registry data. Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
Bred Posté(e) le 1 juillet 2008 Auteur Posté(e) le 1 juillet 2008 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...
bseb67 Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 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 nombretiens 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 celleque 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...
bseb67 Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 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...
Bred Posté(e) le 1 juillet 2008 Auteur Posté(e) le 1 juillet 2008 Si tu veux mettre des suites de string, je pense que la seule solution c'est de faire celleque 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...
Patrick_35 Posté(e) le 1 juillet 2008 Posté(e) le 1 juillet 2008 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 1 juillet 2008 Auteur Posté(e) le 1 juillet 2008 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...
(gile) Posté(e) le 6 décembre 2008 Posté(e) le 6 décembre 2008 Je réponds tardivement, mais je viens de voir des routines de Tony Tanzillo ici qui semblent répondre à ta demande. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 6 décembre 2008 Auteur Posté(e) le 6 décembre 2008 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...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant