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