Друзья! Официальная справка:
Retrieves application data from the AppData section of the acad20xx.cfg file
application это что приложение, простите? И где его брать? Спасибо, кто откликнется.
Решено! Перейти к решению.
Решено: Alexander.Rivilis. Перейти к решению.
koanichL2GH5 написано:Друзья! Официальная справка:
Retrieves application data from the AppData section of the acad20xx.cfg file
application это что приложение, простите? И где его брать? Спасибо, кто откликнется.
========================================================================
Application - это сам AutoCAD 🙂 В более ранних версиях AutoCAD параметры конфигурации сохранялись в файле конфигурации. Например, для версии 2016 файл называется acad2016.cfg. Это обычный текстовый файл, его содержимое может выглядеть примерно так:
; Configuration for AutoCAD 2016 () Microsoft Windows
; C:\Users\Acer\AppData\Local\Autodesk\AutoCAD 2016\R20.1\enu\acad2016.cfg created on 6/12/2015 at 19:54:13[AppData]
[Version]
Platform=Microsoft Windows
FileVersion=8
ExecutableDate&Time=junkjunkjunkjunk[Digitizer/Driver]
MenuName=Current System Pointing Device
PathName=internal
Configured=1[Editor]
Link=0[Menu]
T_Menu=0
В нем есть разделы, в том числе, [AppData]. Как видим, этот раздел пуст. Так что функция (getcfg) в данном случае бесполезна. Смысл написания конфигурационного файла объяснять долго, да и вряд ли вам это нужно. Современные программы хранят свои конфигурационные данные в системном реестре, а не в файле конфигурации, как это было во времена первых версий Windows. Это объяснять еще дольше 🙂 Да вам это и не нужно, если не собираетесь серьезно заняться программированием и писать свои приложения. Конфигурационные данные AutoCAD, в том числе, раздел AppData можно прочитать лисповской функцией (vl-registry-read). Кстати, Autodesk сообщает, что функция (getcfg) устарела, и в следующих версиях будет удалена. А вообще большинство настроек AutoCAD проще узнать из значений системных переменных функцией (getvar). А вообще-то я не совсем понял цель вашего вопроса. Просто ради спортивного интереса? Ну, прочитаете вы некоторые данные из реестра. И что будете с ними делать? Для изучения Автолиспа советовал бы сначала изучить базовые функции и приемы программирования, а уж потом лезть в дебри :))
Вот, например, из вашего файла можно ли получить значение Platform?
Пишу так:
(setq temp (getcfg "AppData/AutoCAD/Version/Platform"))
Возвращается nil, и !temp тоже возврвщает nil, хотя должно быть "Microsoft Windows", ЧЯДНТ?
(getvar "platform")
(getenv "temp")
(getenv "tmp")
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
Мне это зачем? Мне нужно getcfg прочесть хоть ЧТО-НИБУДЬ. Можно в секцию [AppData], которая пустая, написать хоть даже вручную ЧТО-НИБУДЬ, чтобы это что-нибудь прочесть функцией getcfg. Я сам не могу, я смотрю в книгу, а вижу фигу, а как ещё, вот официальная справка:
"AppData/application_name/section_name/.../param_name" Return Values Application data, if successful. If cfgname is not valid, getcfg returns nil. Examples Assuming the WallThk parameter in the AppData/ArchStuff section has a value of 8, the following command retrieves that value: Command: (getcfg "AppData/ArchStuff/WallThk") "8"
Так, то есть в описании синтаксиса притсутствует application_name, (имя приложенияч AutoCAD, как мне объяснили)
А в примере application_name НЕТ! Вот пример:
getcfg "AppData/ArchStuff/WallThk"
Вообще именем приложения и не пахнет. Ни AutoCAD-ом, ничем другим. Так его писать или нет и если писать, то куда?
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library
@Anonymous wrote:
Спасибо, но книжка Полещука у меня есть. И да, ясности она не добавляет ни на йоту.
Вот тебе ясность:
Command: (getcfg "CfgData/Version/Platform") "Microsoft Windows" Command: (getcfg "CfgData/Digitizer/Driver/MenuName") "Current System Pointing Device" Command: (getcfg "CfgData/Version/FileVersion") "8"
Но так же как и предыдущие ораторы я советую отказаться от использования этой функции.
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Alexander.Rivilis написано:
@Anonymous wrote:Спасибо, но книжка Полещука у меня есть. И да, ясности она не добавляет ни на йоту.
Вот тебе ясность:
Command: (getcfg "CfgData/Version/Platform") "Microsoft Windows" Command: (getcfg "CfgData/Digitizer/Driver/MenuName") "Current System Pointing Device" Command: (getcfg "CfgData/Version/FileVersion") "8"Но так же как и предыдущие ораторы я советую отказаться от использования этой функции.
В двух источниках, один из которых справка сказано, что строковый параметр должен иметь вид:
(getcfg "AppData/My/Two/Quattro")
AppData!!!
А у вас почему-то CfgData. Далее должно идти имя какого-то приложения. А у вас где имя приложения? Ну не Version же...
@Anonymous wrote:
В двух источниках, один из которых справка сказано, что строковый параметр должен иметь вид:(getcfg "AppData/My/Two/Quattro")
AppData!!!
А у вас почему-то CfgData. Далее должно идти имя какого-то приложения. А у вас где имя приложения? Ну не Version же...
"Если на клетке слона прочтёшь надпись «буйвол», не верь глазам своим." (C) Козьма Прутков
Как я написал работает нормально? CfgData означает читать из *.cfg-файла (вместо чтения из реестра)
В cfg-файле нет никаких приложений. То, что в квадратных скобках - это имя раздела, то, что без квадратных скобок с символом равно - переменная, значение которой можно получить. В силу того, что этой функцией не пользуется никто уже почти двадцать пять лет, никто уже и не помнит зачем она нужна и как она работает. Актуальна она была только в DOS-овских версиях AutoCAD (т.е. до AutoCAD R13 включительно - 1994 год).
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Alexander.Rivilis написано:
В силу того, что этой функцией не пользуется никто уже почти двадцать пять лет, никто уже и не помнить зачем она нужна и как она работает.
Также, как и мультилиния. Грустно.
И да, работает нормально. Получается, CfgData - недокументированная возможность.
Вот тебе продолжение, так как с (getcfg) есть парная функция - (setcfg):
Command: (setcfg "AppData/Rivilis/MyVarName" "MyValue") "MyValue" Command: (getcfg "AppData/Rivilis/MyVarName") "MyValue"
Смотрим содержимое cfg-файла:
[AppData/Rivilis] MyVarName=MyValue
Теперь так:
Command: (setcfg "CfgData/Rivilis/MyVarName" "MyValue2") "MyValue2" Command: (getcfg "CfgData/Rivilis/MyVarName") "MyValue2"
Смотрим cfg-файл:
[Rivilis] MyVarName=MyValue2
Внимание: Обновление cfg-файла происходит только при завершении работы AutoCAD (скорее всего только если завершение успешное, а не Fatal Error)
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
Здесь нет случая, если искомый параметр присутствует в раздела AppData, тогда пишем так:
(getcfg "AppData/foo")
Но вообще я хотел поблагодарить и сказать, что я, быть и может, то чего-либо подобного дошёл бы и сам, но не предполагал, что содержимое конфигурационного файла считывается только при запуске программы. Я просто менял значения параметров в файле, сохранял его, всяко пытался получить эти значения, но безуспешно. Ну и, конечно, пример из справки:
"AppData/application_name/section_name/.../param_name"
Такой прямо пример-пример... Но жизнь продолжается!
Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.