ADN Open CIS
Сообщество программистов Autodesk в СНГ

12/12/2013

Переменные окружения

Предлагаю поговорить насчет такой простой и элементарной вещи, как функция getenv. Достаточно простая функция, но у нее есть свои особенности.
Все, что написано ниже, касается AutoCAD для Windows (т.к. у меня нет MacOS ни в каком виде, то проверить состояние дел для этой ОС я не могу).
Если мы работаем внутри AutoCAD, то все переменные окружения (т.н. Environment Variables) можно поделить на 2 класса: переменные для Windows и переменные для AutoCAD.
Перечень переменных для Windows получить достаточно просто: вызываем окно cmd (Win+R, cmd) и в ней вбиваем строку set, жмем Enter. Получим перечень вида (приведен пример для Windows 7 Prof x64):
Код - Auto/Visual LISP: [Выделить]
  1. ALLUSERSPROFILE
  2. AMDAPPSDKROOT
  3. APPDATA
  4. CommonProgramFiles
  5. CommonProgramFiles(x86)
  6. CommonProgramW6432
  7. COMPUTERNAME
  8. ComSpec
  9. DXROOT
  10. FP_NO_HOST_CHECK
  11. HOMEDRIVE
  12. HOMEPATH
  13. ILBDIR
  14. LOCALAPPDATA
  15. LOGONSERVER
  16. NUMBER_OF_PROCESSORS
  17. OS
  18. Path
  19. PATHEXT
  20. PROCESSOR_ARCHITECTURE
  21. PROCESSOR_IDENTIFIER
  22. PROCESSOR_LEVEL
  23. PROCESSOR_REVISION
  24. ProgramData
  25. ProgramFiles
  26. ProgramFiles(x86)
  27. ProgramW6432
  28. PSModulePath
  29. PUBLIC
  30. SESSIONNAME
  31. SystemDrive
  32. SystemRoot
  33. TEMP
  34. TMP
  35. USERDNSDOMAIN
  36. USERDOMAIN
  37. USERNAME
  38. USERPROFILE
  39. windir
В любой момент из-под лиспа мы можем обратиться к любой из этих переменных. При этом регистр имени переменной никакой роли не играет: (getenv "TEMP") вернет то же самое, что (getenv "temp").


Что каждая из этих строк означает - расписывать не буду, все есть и в справке по Windows, и так углядеть можно.

Но есть и вторая, более интересная часть переменных окружения - переменные для AutoCAD. Их перечень можно посмотреть в реестре, в ветке HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\RXX.X\ACAD-YYYY:YYY\Profiles\ИмяПрофиля\General. И тут уже надо будет учитывать регистр символов.

Например, есть в указанной ветке реестра ключ ACAD (хранит пути поиска для AutoCAD). Так вот, (getenv "ACAD") вернет вполне нормальное значение, а (getnev "acad") - пустое значение (nil).

При работе приходится это постоянно учитывать...

Обсуждение: http://adn-cis.org/forum/index.php?topic=393

Опубликовано 12.12.2013
Отредактировано 12.12.2013 в 22:11:22