Ajouter des variables systèmes à AutoCAD

mardi 26 août 2025
AutoCADCAO

C'est une fonctionnalité cachée au fin fond de la documentation sur l'API .NET AutoCAD : vous pouvez créer vos propres variables système.

Pour cela, il faut modifier votre base de registre.

⚠️ Petit avertissement au préalable, les manipulations de la base de registre présentent toujours des risques, ne faites cela que si vous êtes à l'aise avec ce genre de modifications.

Il faut aller dans la clé HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\Rxx.x\ACAD-xxxx\, où Rxx.x est la release de AutoCAD et ACAD-xxxx est le code produit.

Pour AutoCAD 2026 par exemple, la clé est HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R25.1\ACAD-9101\, parce que la version 2026 correspond à la release 25.1 et que le code produit est 9101.

La clé de base de registre

La valeur de cette clé correspondra à la valeur de votre variable.

Vous devez également ajouter une valeur DWORD nommée PrimaryType avec le type de votre variable. En effet, la valeur d'une clé dans la base de registre est toujours de type REG_SZ (une chaine de caractères), mais votre variable système AutoCAD peut avoir les types suivants :

  • RTREAL : 5001, un réel comme 2,5
  • RTSHORT: 5003, un entier 16 bits compris entre -32 768 et 32 767
  • RTANG : 5004, un réel
  • RTSTR : 5005, une chaine de caractères
  • RTLONG : 5010, un entier 32 bits compris entre -2 147 483 648 et 2 147 483 647

Petit aparté sur les types SZ et DWORD : ce sont des types de donnée utilisés en programmation, notamment dans les API Windows.

SZ, c'est pour String ending with a Zero. Pour marquer la fin de la chaine de caractère, on met un caractère nul (un octet à 0).

DWORD, c'est pour Double WORD. C'est parce qu'en informatique, on a :

  • 1 octet = 8 bits
  • 2 octets = 16 bits = 1 mot (word en anglais)
  • 4 octets = 32 bits = 1 mot double (double word en anglais)
  • 8 octets = 64 bits = 2 mots doubles (quad word en anglais)

Attention à bien sélectionner la base décimale quand vous saisissez les valeurs. Par défaut, regedit utilise la base hexadécimale (base 16) et dans cette base 5005 en décimal correspond à 138d.

Vous devez également préciser le type de stockage avec une valeur DWORD nommée StorageType :

  • PerSession : 0
  • PerUser : 1
  • PerProfile : 2
  • PerDatabase : 3
  • PerViewport : 4

Si vous choisissez 3 par exemple, la variable sera enregistrée dans le DWG (dans le dictionnaire AcDbVariableDictionary).

Avec 1, elle sera enregistrée dans la base de registre, dans HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R25.1\ACAD-9101:40C\Variables\MYVAR.

Avec 2, elle sera également enregistrée dans la base de registre, mais dans la partie réservée au profil de l'utilisateur, c'est-à-dire dans Ordinateur\HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R25.1\ACAD-9101:40C\Profiles\<Nom du profil>\Variables pour AutoCAD 2026 Français.

Avec 0, elle sera uniquement présente en mémoire et donc réinitialisée au prochain démarrage d'AutoCAD.

Enfin avec 4, elle sera propre à chaque fenêtre.

Il y a également d'autres valeurs optionnelles :

  • SecondaryType : None (0), Boolean (1), SymbolName (2), Area (3), Distance (4), Angle (5), UnitlessReal (6) : pour spécifier l'usage de la variable.
  • TypeFlags : None (0), SpacesAllowed (1), DotMeansEmpty (2), NoUndo (4), Chatty (8), Deprecated (16) pour des options qui peuvent être combinées
  • Owner : pour indiquer le nom de l'application qui possède la variable. "exe" est la valeur par défaut qui désigne l'exécutable principal de AutoCAD
  • LowerBound et UpperBound : pour les valeurs numériques (RTREAL, RTANG, RTSHORT et RTLONG), ces deux entrées permet de préciser la plage de valeurs autorisée

Si vous spécifiez un Owner, la variable ne pourra être écrite que par cette application. La variable RIBBONSTATE par exemple, ne peut être écrite que par AcWindows.dll car Owner est à la valeur AcWindows.

Au format .reg, pour une variable nommée MYVAR de type texte avec la valeur FOO cela donne :

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R25.1\ACAD-9101\Variables\MYVAR]
@="FOO"
"PrimaryType"=dword:0000138d
"StorageType"=dword:00000003

Une fois la variable créée, vous pouvez l'utiliser comme n'importe quelle autre variable système. Je peux par exemple taper MYVAR sur la ligne de commande pour la changer, utiliser les fonctions AutoLISP (getvar) et (setvar) ou les méthodes Application.GetSystemVariable() et Application.SetSystemVariable() en .NET.