DenisHen Posté(e) le 16 novembre 2023 Posté(e) le 16 novembre 2023 Bonjour à la communauté Ayant passé pas mal de temps à comprendre et tester les différents accès à la base de registre depuis un LiSP, je vous propose mon petit « pense-bête ». Bien entendu, je vous invite à nous faire part de vos remarques et observations, car je compte un peu là-dessus 😉. La base de registre est structurée comme une « arborescence » (indiquée en une ligne sous le menu de l'éditeur de registre) : Exemple : HKEY_CURRENT_USER\SOFTWARE\Autodesk\AutoCAD\R24.2 "Ordinateur" est volontairement omis. Remarque : il peut être dangereux d'utiliser des clefs de registre de logiciels existants, préférer créer vos propres clefs. Il me semble que l’accès à toutes les clefs est limité, seules les racines HKEY_USERS et HKEY_LOCAL_MACHINE sont accessibles. Liste des « répertoires » (contenant des clefs) d’un chemin. _$ (append (vl-registry-descendents "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD\\R24.2")) ("ACAD-6101:40C") Liste des « clefs » (contenants une valeur) d’un chemin. _$ (append (vl-registry-descendents "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD\\R24.2" "")) ("LastLaunchedLanguage" "LastLaunchedProduct" "CurVer") Lecture d’une valeur de clef. _$ (vl-registry-read "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD\\R24.2" "CurVer") "ACAD-6101:40C" Création et/ou écriture d’une valeur de clef. (vl-registry-write "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD\\R24.2" "CadXP" "DenisH") La valeur « DenisH » a été attribuée à la clef « CadXP », si la clef n’existe pas, elle sera créée. Suppression d’une clef. _$ (vl-registry-delete "HKEY_CURRENT_USER\\SOFTWARE\\Autodesk\\AutoCAD\\R24.2" "CadXP") T La réponse est « T » si elle a bien été supprimée ou nil si elle n’a pas été trouvée. Ce petit pense-bête n'est qu'une proposition, et bien entendu, une explication succincte, à nous de l'alimenter... Je m'en ferais un PDF que je partagerais volontiers. Bien à toi la communauté. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 16 novembre 2023 Posté(e) le 16 novembre 2023 Salut, Voir les fonctions vlax-product-key vlax-machine-product-key vlax-user-product-key Jusqu'à AutoCAD 2012 on utilisait vlax-product-key indifféremment pour HKCU et HKLM, depuis AutoCAD 2012, il y a deux fonctions différenciées au cas ou le chemin dans HKCU soit différent de celui dans HKLM. _$ (strcat "HKEY_CURRENT_USER\\" (vlax-user-product-key)) "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R24.3\\ACAD-7101:40C" _$ (strcat "HKEY_LOCAL_MACHINE\\" (vlax-machine-product-key)) "HKEY_LOCAL_MACHINE\\Software\\Autodesk\\AutoCAD\\R24.3\\ACAD-7101:40C" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 16 novembre 2023 Posté(e) le 16 novembre 2023 Bonjour, Je vois que tu crée une clé dans le registre d'Autocad. Il me semble que ce n'est pas conseillé (trop facile de faire une erreur). Pour les clés perso, rien ne t'empêche de créer une application, au même niveau qu'Autodesk, et d'y mettre toutes les clé que tu veux sans danger pour l'intégrité de ton logiciel préféré. De plus, c'est un chemin qui ne dépend pas de la version d'Autocad, ni du profile. Bonne exploration https://github.com/Fraiddd
DenisHen Posté(e) le 17 novembre 2023 Auteur Posté(e) le 17 novembre 2023 Bonjour @Fraid. Oui, créer une clef dans le registre AutoCAD est "dangereux", je suis entièrement d'accord. Mais c'était pour l'exemple, pour que tout le monde puisse avoir la même chose (à par la version, comme tu le soulignes). Car si j'avais donné l'exemple de mes clefs "perso", l'exemple aurait peut-être été moins efficace. Je vais aussi faire un petit exemple avec "user", au cas où... Merci pour ta remarque judicieuse... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 17 novembre 2023 Posté(e) le 17 novembre 2023 On peut écrire dans le registre AutoCAD, mais comme toujours en programmation, il faut le faire prudemment. Par exemple, on peut depuis AutoCAD 2012, créer des variables système personnalisées en écrivant des clés dans la base de registre (En LISP on ne peut écrire que dans HKCU, donc les variables seront définies 'par utilisateur). Traduction de l'aide .NET pour le format des clés de variables système: [HKEY_CURRENT_USER\{ProductRegistryRoot}\Variables\{Nom de la variable}] @="{valeur par défaut}" : Requis, sera converti en PrimaryDataType "PrimaryType"=dword:{Type principal} : Requis "SecondaryType"=dword:{Type secondaire} : Optionnel "TypeFlags"=dword:{Drapeau de type} : Optionnel "StorageType"=dword:{Type de stockage} : Requis "Owner"="{Nom de l'application|exe}" : Optionnel "Range"="{minimum},{maximum}" : Optionnel, s'applique aux type principaux RTREAL, RTANG, RTSHORT et RTLONG "PrimaryType" RTREAL = 5001 Nombre réel RTSHORT = 5003 Nombre entier (16 bits) RTSTR = 5005 Chaîne de caractère RTLONG = 5010 Nombre entier (32 bits) "SecondaryType" Angle = 5 La variable représente une valeur angulaire. Area = 3 La variable représente un valeur d'aire. Valable uniquement lorsque le type principal est RTREAL Boolean = 1 La variable est un booléen. Valable uniquement lorsque le type principal est RTSHORT Distance = 4 La variable représente une valeur de distance. Valable uniquement lorsque le type principal est RTREAL Last = 6 Marque le dernier élément de l'énumération. None = 0 Aucun type de données secondaires n'est spécifié. SymbolName = 2 La variable est un nom de symbole RealDWG. Valable uniquement lorsque le type principal est RTSTR UnitlessReal = 6 La variable représente une valeur réelle sans unité. "StorageType" PerSession = 1 Etendue de l'application, ne persiste pas. PerUser = 2 Etendue de l'application, persiste par utilisateur. PerProfile = 3 Etendue de l'application, persiste par profil AutoCAD. PerDatabase = 4 Etendue du document, persiste dans le dessin. "TypeFlags" Chatty = 8 La variable envoie des notifications lorsqu'elle prend la même valeur que la précédente. Les variables ignorent normalement les tentatives de définir la même valeur deux fois de suite. DotMeansEmpty = 2 Le caractère . doit être interprété comme une chaîne vide. Valable uniquement lorsque le type principal est RTSTR None = 0 Aucun indicateur de type n'est spécifié. NoUndo = 4 La variable n'enregistre pas l'annulation. SpacesAllowed = 1 Les espaces sont autorisés dans les valeurs des variables. Valable uniquement lorsque le type principal est RTSTR Un exemple pour créer une variable système persistante dans le document, nommée "SOME_INTEGER", de type entier compris entre 0 et 15. ((lambda (varName / rootKey) (setq rootKey (strcat "HKEY_CURRENT_USER\\" (vlax-user-product-key) "\\Variables\\" ) ) (foreach p '(("" "0") ; valeur par défaut ("PrimaryType" 5003) ; nombre entier ("StorageType" 4) ; persiste dans le document ("LowerBound" 0) ; valeur minimale ("UpperBound" 15) ; valeur maximale ) (apply 'vl-registry-write (cons (strcat rootKey varName) p)) ) ) "SOME_INTEGER" ; nom de la variable ) La variable nouvellement créée est accessible avec les fonctions LISP setvar et getvar et avec la commande MODIFVAR. Commande: (getvar 'some_integer) 0 Commande: MODIFVAR Entrez le nom de la variable ou [?]: some_integer Entrez une nouvelle valeur pour SOME_INTEGER <0>: 42 Nécessite un entier entre 0 et 15. Entrez une nouvelle valeur pour SOME_INTEGER <0>: 7 Commande: (getvar 'some_integer) 7 Commande: (setvar 'some_integer -1) ; erreur: paramètre de la variable AutoCAD rejeté: SOME_INTEGER -1 Commande: (getvar 'some_integer) 7 2 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 17 novembre 2023 Posté(e) le 17 novembre 2023 Un autre exemple avec une variable nommée "SOME_ANGLE", persistante par utilisateur, de type nombre réel (valeur angulaire) ((lambda (varName / rootKey) (setq rootKey (strcat "HKEY_CURRENT_USER\\" (vlax-user-product-key) "\\Variables\\" ) ) (foreach p '(("" "0.0") ; valeur par défaut ("PrimaryType" 5001) ; nombre réel ("SecondaryType" 5) ; valeur d'angle ("StorageType" 2) ; persiste par utilisateur ) (apply 'vl-registry-write (cons (strcat rootKey varName) p)) ) ) "SOME_ANGLE" ; nom de la variable ) Avec le type valeur angulaire, MODIFVAR utilise l'unité angulaire courante (getvar/setvar utilisent toujours les radians). Commande: (getvar 'some_angle) 0.0 Commande: (setvar 'some_angle (/ pi 6)) 0.523599 Commande: MODIFVAR Entrez le nom de la variable ou [?]: some_angle Entrez une nouvelle valeur pour SOME_ANGLE <30>: 180 Commande: (getvar 'some_angle) 3.14159 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 17 novembre 2023 Auteur Posté(e) le 17 novembre 2023 Un grand merci @(gile) pour ces explications. Mais du coup, je me pose une petite question : quelle est la différence avec (setenv et (getenv ? Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 17 novembre 2023 Posté(e) le 17 novembre 2023 Il y a 2 heures, DenisHen a dit : Mais du coup, je me pose une petite question : quelle est la différence avec (setenv et (getenv ? Tu n'as pas lu attentivement, les variables système permettent un contrôle des valeurs bien plus précis. Avec getenv / setenv : la valeur est uniquement de type chaînes de caractère sans espace la valeur est enregistrée identiquement pour tous les utilisateurs, tous les profils, tous les dessins Avec les variables systèmes : la valeur peut être une chaîne de caractère avec ou sans espaces ou un nombre entier 16 bits, entier 32 bits ou réel avec une limite inférieure et/ou supérieure et ce nombre peut représenter un angle, une distance, une aire ou une valeur booléenne. la valeur peut ne pas être enregistrée ou bien être enregistrée par utilisateur, par profil ou par dessin Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 17 novembre 2023 Auteur Posté(e) le 17 novembre 2023 Ok, merci, je n'avais pas compris la portée de (setenv et (getenv. Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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