I've changed subs for envvars and sysvars accordingly... These system variables are stored in registry - look at second sub function...
(defun envvars ( / get-acad-regroots unique-sorted-strlst flatten get-acad-envvars )
(vl-load-com)
(defun get-acad-regroots nil
(mapcar (function vl-filename-directory)
(mapcar (function (lambda ( root path ) (strcat root ((eval path)))))
'("HKEY_LOCAL_MACHINE\\" "HKEY_CURRENT_USER\\")
(cond (vlax-machine-product-key '(vlax-machine-product-key vlax-user-product-key))
('(vlax-product-key vlax-product-key))
)
)
)
)
(defun unique-sorted-strlst ( strlst / prev test )
(vl-remove-if (function (lambda ( next )
(cond ((setq test (eq next prev)))
((setq prev next))
)
test))
(acad_strlsort (mapcar (function strcase) strlst))
)
)
(defun flatten ( l )
(if (atom l)
(list l)
(append (flatten (car l)) (if (cdr l) (flatten (cdr l))))
)
)
(defun get-acad-envvars ( / read-envvars add-path dir )
(defun add-path ( subkey ) (strcat path "\\" subkey))
(defun read-envvars ( path )
(if (vl-registry-descendents path)
(mapcar (function read-envvars) (mapcar (function add-path) (vl-registry-descendents path)))
path
)
)
(unique-sorted-strlst
(append
(apply (function append)
(mapcar
(function (lambda ( x )
(vl-remove-if-not
(function getenv)
(vl-registry-descendents x t)
)
)
) (setq dir (flatten (mapcar (function read-envvars) (get-acad-regroots))))
)
)
(vl-remove-if-not (function getenv) (mapcar (function vl-filename-base) dir))
)
)
)
(get-acad-envvars)
)
(defun sysvars ( / get-acad-regroots unique-sorted-strlst flatten get-acad-sysvars )
(vl-load-com)
(defun get-acad-regroots nil
(mapcar (function vl-filename-directory)
(mapcar (function (lambda ( root path ) (strcat root ((eval path)))))
'("HKEY_LOCAL_MACHINE\\" "HKEY_CURRENT_USER\\")
(cond (vlax-machine-product-key '(vlax-machine-product-key vlax-user-product-key))
('(vlax-product-key vlax-product-key))
)
)
)
)
(defun unique-sorted-strlst ( strlst / prev test )
(vl-remove-if (function (lambda ( next )
(cond ((setq test (eq next prev)))
((setq prev next))
)
test))
(acad_strlsort (mapcar (function strcase) strlst))
)
)
(defun flatten ( l )
(if (atom l)
(list l)
(append (flatten (car l)) (if (cdr l) (flatten (cdr l))))
)
)
(defun get-acad-sysvars ( / read-sysvars add-path dir )
(defun add-path ( subkey ) (strcat path "\\" subkey))
(defun read-sysvars ( path )
(if (vl-registry-descendents path)
(mapcar (function read-sysvars) (mapcar (function add-path) (vl-registry-descendents path)))
path
)
)
(unique-sorted-strlst
(append
(apply (function append)
(mapcar
(function (lambda ( x )
(vl-remove-if-not
(function getvar)
(vl-registry-descendents x t)
)
)
) (setq dir (flatten (mapcar (function read-sysvars) (get-acad-regroots))))
)
)
(vl-remove-if-not (function getvar) (mapcar (function vl-filename-base) dir))
)
)
)
(get-acad-sysvars)
)
I think that this is all relevant what can be pulled out from registry...
Regards, M.R.
Marko Ribar, d.i.a. (graduated engineer of architecture)