Aller au contenu

Trouver toutes les variables d'environnement


(gile)

Messages recommandés

Salut,

 

Suite à ce sujet, j'ai essayé de faire quelque chose en .NET pour trouver toutes les variables d'environnement accessibles par la fonction LISP getenv.

Je ne suis pas sûr de toutes les récupérer mais je pense en avoir pas mal (autour de 300 suivant les versions), faites moi savoir si vous en trouvez qui ne seraient pas retournées par la fonction.

 

Les DLLs contenues dans GetEnvVars.zip définissent une fonction LISP : gc-getenvvars qui retourne une liste des noms de variables d'environnement.

Charger la Dll correspondant à la version d'AutoCAD (GetEnvVars_18 pour A2010 à A2012 ou GetEnvVars_19 pour A2013) et utiliser la fonction gc-getenvvars sans arguments :

(setq lst (gc-getenvvars))

 

La fonction cherche récursivement dans la base de registre toutes les valeurs de toutes les clés à partir la clé de produit de la version courante d'AutoCAD aux quelles sont ajoutées les valeurs de HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Toutes ces valeurs sont ensuite testée avec GetEnv pour écarter celles qui retourne nil.

Le code C# utilise Linq pour traiter les collections, la récursivité pour parcourir l'arborescence de la base de registre, P/Invoke pour accéder à la méthode ObjectARX non gérée acedGetEnv et la compilation conditionnelle pour partager le même code entre les projets R18 et R19:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Microsoft.Win32;

namespace Gile.EnvironmentVariable
{
   public class Functions
   {
       [LispFunction("gc-GetEnvVars")]
       public ResultBuffer GetEnvVars(ResultBuffer resbuf)
       {
           if (resbuf != null)
           {
               Application.ShowAlertDialog("nombre d'arguments trop important");
               throw new ArgumentException();
           }
#if ACAD_19
           string prodKey = HostApplicationServices.Current.UserRegistryProductRootKey;
#else
           string prodKey = HostApplicationServices.Current.RegistryProductRootKey;
#endif
           string ctrlKey = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
           return new ResultBuffer(
               GetValues(prodKey)
               .Concat(Registry.LocalMachine.OpenSubKey(ctrlKey).GetValueNames())
               .Distinct()
               .Where(s => GetEnv(s) != null)
               .OrderBy(s => s)
               .Select(s => new TypedValue((int)LispDataType.Text, s))
               .ToArray());
       }

       private IEnumerable<string> GetValues(string key)
       {
           RegistryKey rk = Registry.CurrentUser.OpenSubKey(key);
           return rk.GetValueNames()
               .Concat(rk.GetSubKeyNames()
                   .SelectMany(k => GetValues(key + "\\" + k)));
       }

#if ACAD_19
       [system.Security.SuppressUnmanagedCodeSecurity]
       [DllImport("accore.dll", EntryPoint = "acedGetEnv", 
           CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
       extern static int acedGetEnv(string envName, string returnValue);
#else
       [system.Security.SuppressUnmanagedCodeSecurity]
       [DllImport("acad.exe", EntryPoint = "acedGetEnv",
           CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
       extern static int acedGetEnv(string envName, string returnValue);
#endif

       public static string GetEnv(string envName)
       {
           string returnValue = new string(char.MinValue, 1024);
           int stat = acedGetEnv(envName, returnValue);
           return stat == -5001 ? null : returnValue;
       }
   }
}

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

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile)

 

Sympa ta fonction :D

Juste une petite remarque, si on n'a pas le message (cadxp) associé à dll, on ne connait pas le nom de la commande.

Ce serait bien d'avoir un message lors du chargement de la DLL qui indique quoi faire.

 

On pourrai aussi aller plus loin, comme aussi tracer toutes les variables d'autocad (un peu comme le lisp acadinfo des express) et ainsi pouvoir faire un comparatif de variables entre plusieurs dessins, voire d'ordinateurs.

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour (giles),

Est ce normal que la liste soit tronquée dans la fenêtre ?

 

Commande: (setq lst (gc-getenvvars))

es color" "Perspective grid minor lines tint" "Perspective ground horizon"

"Perspective ground origin" "Perspective hotspot color" "Perspective lux at

distance color" "Perspective sky horizon" "Perspective sky zenith" "Perspective

start color" "Perspective sub-surface azimuth" "Perspective sub-surface

horizon" "Perspective Web color" "Perspective Web shape color" "Perspective

.....

tint" "Perspective grid major lines color" "Perspective grid major lines tint"

"Perspective grid minor lin

 

Un autre Lyonnais

daniel OLIVES

Lien vers le commentaire
Partager sur d’autres sites

tyres69_,

Oui, j'ai remarqué ça sur 2013, je pense que c'est un problème d'affichage avec la nouvelle fenêtre de texte.

Essaye dans l'éditeur Visual LISP, tu peux copier/coller la liste depuis la console vers une nouvelle fenêtre et la formater (Ctrl+alt+F).

 

Patrick_35,

Le nom de la fonction LISP : gc-getenvvars est dans le premier message.

Mon but était juste de lister toutes (?) les variables d'environnement, ceci étant fait, je laisse chacun utiliser cette liste en LISP selon ses besoins (avec statenv de bonuscad, par exemple).

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

Lien vers le commentaire
Partager sur d’autres sites

:(

 

Je suis pas enregistré sur "the swamp" (je consulte juste de temps en temps, mais ne participe pas.Bien que je me débrouille en anglais, cela ne reste pas mon fort), je ne peux donc retirer la pièce.

Pour l'occasion, j'ai voulu le faire, mais la section registration est down pour le moment...

 

Si quelqu'un peu me la proposer autrement, c'est bien volontier. Je pourrais ainsi la tester sous MAP 2011

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Le nom de la fonction LISP : gc-getenvvars est dans le premier message.

Oui et c'est très bien.

Ce que je voulais dire, c'est par exemple dans trois mois que j'utilise ta fonction.

Je charge la dll et pas de message; Grumff, quel est déjà le nom de la fonction. Ah oui, c'est sur Cadxp que je l'ai trouvé.

Après une recherche incertaine sur cadxp ou google, je trouve enfin le nom de la fonction.

Avoues que tu as plus simple en affichant un petit message après le chargement de la dll

 

Mon but était juste de lister toutes (?) les variables d'environnement, ceci étant fait, je laisse chacun utiliser cette liste en LISP selon ses besoins (avec statenv de bonuscad, par exemple).

Oui, et c'est très bien.

Mais tu as aussi les express qui listent toutes les variables.

Comme tu récupères les variables dans les registres, c'était juste pour un outil plus complet.

Il pourrait même être payant car je pense qu'il va en intéresser plus d'un, surtout avec une comparaison de variables.

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

hello

 

un petit truc retrouver les commandes

 

c'est ecrit dans un lisp

bon ok ca se charge a chaque fois et j'en ai pas l'utilité

mais avec des ";;;" devant il se chargera pas mais serat facilement retrouvable

avec un ptit "vlide"

 

;;commande "gc-getenvvars" "(setq lst (gc-getenvvars))"
(command "_NETLOAD" "GetEnvVars_19.dll")

 

a+

phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Merci pour la redirection du lien,

 

C'est parfait sous ma version MAP2011, la fonction me retourne 322 variables + 5 concernant un certain Patrick_35 ;)

 

Franchement cela sera utile aux programmeurs qui voudront "traquer" les variables.

Du coup on peut même virer les indésirables :(rires forts): :(rires forts):

 

Mais non Patrick_35, je plaisante.

 

Sincère remerciement pour ce partage et à ta vivacité de création. Même pas eu le temps de regarder si je pouvais faire quelque chose de moi-même en simple lisp avec la piste que tu m'avais donné. Mais je pense que le ferais quand même car je n'aime pas être attaché à des problèmes de version de DLL.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

J'ai essayé certaines variables que j'ai donné dans l'autre fil. (la liste provient de Bruno Toniutti depuis une 2004)

 

Et bien beaucoup sont encore valables mais ne figure pas dans ta liste, ce qui me laisse penser que des variables "se planquent" aussi ailleurs que dans la branche de registre indiquée. Aie!!! le registre est grand...

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

+ 5 concernant un certain Patrick_35 ;)

Mince, je suis grillé :ph34r: :(rires forts):

Voila ce que c'est de se servir de lisps qui sont quand même bien utile B)

 

si je pouvais faire quelque chose de moi-même en simple lisp

Tu as des fonctions en vlisp (vl-registry-*) qui le permettent ou encore d'utiliser l'activex WScript.Shell qui permet surement plus de choses, mais que je n'ai jamais approfondis.

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Patrick_35,

Avoues que tu as plus simple en affichant un petit message après le chargement de la dll

C'est vrai que je n'ai pas cette habitude, je l'ai très rarement fait pour les LISPs.

 

Mais tu as aussi les express qui listent toutes les variables.

À ma connaissance les express lisent les variables système, pas les variables d'environnement.

 

Tu as des fonctions en vlisp (vl-registry-*) qui le permettent ou encore d'utiliser l'activex WScript.Shell qui permet surement plus de choses, mais que je n'ai jamais approfondis.

Comme je le disais dans l'autre sujet, la fonction vl-registry-descendents permet de récupérer toutes les sous-clés mais il n'y a pas de fonction pour lister toutes les valeurs d'une clé. J'ai un peu regardé WScript.Shell et n'ai rien trouvé non plus qui corresponde à la méthode .NET RegistryKey.GetValueNames().

 

bonuscad,

J'ai essayé certaines variables que j'ai donné dans l'autre fil. (la liste provient de Bruno Toniutti depuis une 2004)

 

Et bien beaucoup sont encore valables mais ne figure pas dans ta liste, ce qui me laisse penser que des variables "se planquent" aussi ailleurs que dans la branche de registre indiquée. Aie!!! le registre est grand...

Merci, je vais essayer de trouver quelle(s) autre(s) clé(s) fouiller.

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Je suis bien embêté, j'ai extrait de la liste de Bruno Toniutti les noms de variable qui ne sont pas dans la liste retournée par gc-getenvvars et qui sont valides avec getenv. Le problème c'est que ces variables ne semblent pas enregistrées dans la base de registre, en tout cas, une recherche ne permet pas de les retrouver...

 

Voici la liste en question :

("ActiveAssistance"
 "AlarmOnError"	   "AssignInsertUnits"
 "AuditControlFlags"	   "AutoSaveFile"
 "AutoSnapShowAperture"   "AutoSnapSize"
 "AutoSnapTrackPath"	   "BmpOutCompression"
 "CheckDrawingSignature"  "CmdHistLines"
 "CommandDialogs"	   "ContextMenus"
 "CursorSize"		   "DatabaseTablesOpenMode"
 "DefaultPlotToFile"	   "DemandLoadingModeler"
 "DigitizerArbitration"   "DisableGraphicsTextArea"
 "DisableScreenMenuArea"  "DisableTrueColor"
 "EdgeMode"		   "EntityExtentVariant"
 "ExplorerInsertUnits"	   "FileDialog"
 "GripBlock"		   "GripColor"
 "GripHot"		   "Grips"
 "GripSize"		   "HideWarningDialogs"
 "ImageHighlight"	   "ImportPathInfo"
 "IsaveBackupDwg"	   "LayoutRegenControl"
 "LineWeightDisplayScale" "LoadPaletteBySession"
 "LogFileOpen"		   "MaxApp"
 "MaxArray"		   "MaxOctTreeNodesToAllocate"
 "MaxSortEntries"	   "MenuOptionFlags"
 "MiddleButtonPan"	   "MRUFilesToList"
 "ObjectSnapCursorSize"   "OffsetCurveGapType"
 "OleHide"		   "OsnapCoord"
 "PickAdd"		   "PickAuto"
 "PickBox"		   "PickDrag"
 "PickFirst"		   "PlineType"
 "PlotRotationMode"	   "PlotSpoolerNode"
 "PostscriptQuality"	   "PROXYWEBSEARCHNUMBER"
 "QAFlags"		   "RasterPreview"
 "RtDisplay"		   "ShowHyperlinkCursor"
 "ShowOleScaleDialog"	   "ShowPaperBackground"
 "ShowPaperMargins"	   "ShowPaperSize"
 "ShowPrintBorder"	   "ShowProxyGraphics"
 "ShowRuler"		   "SnapType"
 "SQLIndexInDwg"	   "StatusLine&CoordinateDisplay"
 "TextFill"		   "Trim&ExtendProjectMode"
 "Trimmode"		   "UCSAxisAng"
 "UcsIcon3d"		   "UcsIconActiveColor"
 "UcsIconCone"		   "UcsIconLineWidth"
 "UcsIconNonActiveColor"  "UcsIconSize"
 "UCSView"		   "UseContextMenus"
 "UseMenuHeader"	   "WhipArcEnable"
 "WhipThreadEnable"	   "XFadeCtl"
 "XrefControlFlags"
)

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Avec un logiciel de surveillance de registre (regshot) j'en ai pris une au hazard "CmdHistLines"

 

en modifiant dans Autocad avec (setvar "CmdHistLines" "1200")

 

----------------------------------

Valeurs modifiées :1

----------------------------------

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\CmdHistLines: 0x000007D0

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\CmdHistLines: 0x000004B0

 

----------------------------------

Nombre de modifications :1

----------------------------------

 

 

des que j'ai le temps j'en regarde d'autre

Lien vers le commentaire
Partager sur d’autres sites

en fait

en faisant un (mapcar '(lambda (x) (setenv x (getenv x))) ListEnv)

----------------------------------

Valeurs ajoutées :76

----------------------------------

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\AuditControlFlags: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\AutoSnapTrackPath: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\DisableGraphicsTextArea: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\GripBlock: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\GripColor: 0x00000096

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\GripHot: 0x0000000C

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\Grips: 0x00000002

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\GripSize: 0x00000005

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\MaxOctTreeNodesToAllocate: 0x00989680

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\MenuOptionFlags: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\OffsetCurveGapType: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\OleHide: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\PickAdd: 0x00000002

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\PickAuto: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\PickBox: 0x00000003

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\PickDrag: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\PostscriptQuality: 0x0000004B

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\SnapType: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\StatusLine&CoordinateDisplay: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\Trim&ExtendProjectMode: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UCSAxisAng: 0x00000002

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UcsIcon3d: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UcsIconActiveColor: 0x00000007

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UcsIconCone: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UcsIconLineWidth: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UcsIconNonActiveColor: 0x000000A0

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UcsIconSize: 0x00000032

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\UCSView: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\Editor Configuration\XrefControlFlags: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\General\ActiveAssistance: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\General\MaxArray: 0x000186A0

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\General\MRUFilesToList: 0x00000009

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\General Configuration\CommandDialogs: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\General Configuration\PlotRotationMode: 0x00000002

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\FixedProfile\General Configuration\QAFlags: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\CursorSize: 0x00000005

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\DigitizerArbitration: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\DisableTrueColor: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\HideWarningDialogs: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\ShowHyperlinkCursor: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\ShowPaperBackground: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\ShowPaperMargins: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\ShowPaperSize: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\ShowPrintBorder: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\ShowRuler: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Drawing Window\XFadeCtl: 0x00000032

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Editor Configuration\ContextMenus: 0x0000000B

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Editor Configuration\DisableScreenMenuArea: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Editor Configuration\MiddleButtonPan: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Editor Configuration\OsnapCoord: 0x00000002

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Editor Configuration\PlineType: 0x00000002

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\Editor Configuration\UseContextMenus: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\AssignInsertUnits: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\BmpOutCompression: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\DatabaseTablesOpenMode: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\DemandLoadingModeler: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\EdgeMode: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\ExplorerInsertUnits: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\ImageHighlight: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\ImportPathInfo: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\LineWeightDisplayScale: 0x0000000A

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\LoadPaletteBySession: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\LogFileOpen: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\MaxApp: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\ShowOleScaleDialog: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\ShowProxyGraphics: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\SQLIndexInDwg: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\Trimmode: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\UseMenuHeader: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General\WhipArcEnable: 0x00000000

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General Configuration\AutoSaveFile: "auto.sv$"

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General Configuration\DefaultPlotToFile: "."

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General Configuration\IsaveBackupDwg: 0x00000001

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General Configuration\PlotSpoolerNode: "ac$"

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General Configuration\PROXYWEBSEARCHNUMBER: 0x00000005

HKU\S-1-5-21-117558784-3055084300-3146870412-500\Software\Autodesk\AutoCAD\R18.1\ACAD-9001:40C\Profiles\Fred\General Configuration\RasterPreview: 0x00000001

 

----------------------------------

Nombre de modifications :76

----------------------------------

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Tim Willey sur TheSwamp m'a orienté vers un autre méthode peut-être plus fiable.

Cette méthode utilise un utilitaire : Strings.exe qui permet d'extraire les chaîne Unicode d'un fichier .exe ou .dll.

Cet utilitaire s'utilise avec la console (cmd.exe) :

- démarrer la console (cmd.exe)

- se placer dans le répertoire contenant Strings.exe

cd C:\Strings

- lancer Strings.exe sur le fichier acad.exe pour lister les chaînes unicode de plus de 2 caractères en spécifiant une fichier de sortie pour récupérer les résultats (modifier les chemins d'acad.exe et du fichier de sortie selon vos besoins).

strings -u -n 2 "c:\program files\autodesk\autocad 2011\acad.exe" > "c:\strings\Strings2011.txt"

 

Pour AutoCAD 2013, il faudra aussi exécuter Strings.exe sur le fichier accore.dll et en ajouter le contenu à celui généré par avec acad.exe.

 

Le fichier ainsi généré peut facilement être traité en LISP (ou avec un autre langage) pour en extraire les variables système ou les variables d'environnement. Concernant ces dernières, le fichier ne récupère que celle définies par AutoCAD. Les variables définies par l'utilisateur avec setenv ainsi que certaines créées par Windows que récupérait la méthode précédente seront absentes.

 

Exemples de traitement en LISP pour générer des fichiers .txt contenant les variables système et d'environnement

 

Code modifié pour supprimer les doublons

;; Lister le nom des variables système ou d'environnement AutoCAD
;;
;; Lecture d'un fichier txt généré par l'applicatif Strings.exe
;; http://technet.microsoft.com/en-us/sysinternals/bb897439.aspx.
;; Lancer la console (cmd.exe) et exécuter deuis le répertoire de String.exe :
;; strings -u -n 2 "C:\Program Files\Autodesk\AutoCAD 2011\acad.exe" > StringsA2011.txt
;; le fichier StringsA2011.txt contient toutes les chaînes Unicode contenues dans AutoCAD.exe

;; Variables d'environnement
;; (envvars "C:\\Strings\\Strings2011.txt" "C:\\Strings\\EnvVars2011.txt")
(defun envvars (input output / file line lst)
 (setq file (open input "r"))
 (while (setq line (read-line file))
   (if
     (and
(getenv line)
(not (vl-position line lst))
     )
      (setq lst (cons line lst))
   )
 )
 (close file)
 (vl-sort lst '(lambda (s1 s2) (< (strcase s1) (strcase s2))))
 (setq file (open output "w"))
 (foreach s lst (write-line s file))
 (close file)
)

;; Variables système
;; (sysvars "C:\\Strings\\Strings2011.txt" "C:\\Strings\\SysVars2011.txt")
(defun sysvars (input output / file line lst)
 (setq file (open input "r"))
 (while (setq line (read-line file))
   (setq line (strcase (vl-string-left-trim "*" line)))
   (if
     (and
(getvar line)
(not (vl-position line lst))
     )
      (setq lst (cons line lst))
   )
 )
 (close file)
 (vl-sort lst '<)
 (setq file (open output "w"))
 (foreach s lst (write-line s file))
 (close file)
)

 

VariablesAutoCAD.zip continent les fichiers txt pour les variables système et d'envirnnement des versions 2010 à 2013

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

Lien vers le commentaire
Partager sur d’autres sites

Dire que j'avais fais ça manuellement (époque de la R14 avec un éditeur héxa) pour trouver les variables cachées dans le AutoCAD.exe

 

Que dire de plus, tout simplement parfait.

 

Pour MAP 2011 j'arrive à 834 variables système (comment voulez vous qu'on s'en sorte avec autant de variables?)

et 572 variables d'environnement...

 

Ta méthode avec le registre reste toujours valables pour celle qui seraient définies par l'utilisateur.

 

Avec tout ça on est paré.

 

Merci du temps passé!

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Les codes LISP donnés ci dessus ne supprimaient pas les doublons, je les ai modifiés.

 

Puisqu'on est dans le forum .NET, je donne les codes équivalent pour les variables d'environnement en C# et F# (tous utilisent la méthode GetEnv définies dans le premier message).

 

C# style impératif classique

        private void GetEnvVars(string input, string output)
       {
           List<string> lines = new List<string>();
           using (StreamReader reader = new StreamReader(input))
           {
               string line = reader.ReadLine().Trim();
               while (line != null)
               {
                   if (GetEnv(line) != null && !lines.Contains(line))
                       lines.Add(line);
                   line = reader.ReadLine().Trim();
               }
           }
           lines.Sort((l1, l2) => l1.ToUpper().CompareTo(l2.ToUpper()));
           using (StreamWriter writer = new StreamWriter(output))
           {
               foreach (string line in lines)
               {
                   writer.WriteLine(line);
               }
           }
       }

 

C# style plus fonctionnel (utilisation de Linq)

        private void GetEnvVars(string input, string output)
       {
           using (StreamReader reader = new StreamReader(input))
           using (StreamWriter writer = new StreamWriter(output))
           {
               var lines = reader.ReadToEnd()
                   .Split('\n')
                   .Select(s => s.Trim())
                   .Distinct()
                   .Where(s => GetEnv(s) != null)
                   .OrderBy(s => s.ToUpper());
               foreach (string line in lines)
               {
                   writer.WriteLine(line);
               }
           }
       }

 

F#

let getenvvars (input: string) (output: string) =
   use reader = new StreamReader(input)
   use writer = new StreamWriter(output)
   reader.ReadToEnd().Split('\n')
   |> Seq.map(fun s -> s.Trim())
   |> Seq.distinct
   |> Seq.filter(fun s -> getEnv(s) <> null)
   |> Seq.sortBy(fun s -> s.ToUpper())
   |> Seq.iter(fun s -> writer.WriteLine(s))

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

Lien vers le commentaire
Partager sur d’autres sites

Les codes LISP donnés ci dessus ne supprimaient pas les doublons, je les ai modifiés.

 

Une coquille: (getvar line) dans les 2codes au lieu de (getenv line) dans (envvars).

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Salut (gile)

 

Je viens de tester (méthode avec strings.exe) pour trouver toutes les variables et je n'ai pas tout.

Par exemple, je ne trouve pas AFLAGS dans le fichier des variables système.

 

J'ai aussi regardé la taille de ton fichier pour une 2013 (11446) et le mien pour une 2014 en 64 bits (2321)

Surement une DLL à intégrer, mais laquelle ?

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

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é