| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Узнать системный десятичный разделитель через переменную окружения (среды) с помощью GETENV

Узнать системный десятичный разделитель через переменную окружения (среды) с помощью GETENV

Ответ
Поиск в этой теме
Непрочитано 11.01.2023, 08:01 #1
Узнать системный десятичный разделитель через переменную окружения (среды) с помощью GETENV
Florian Geyer
 
Регистрация: 04.12.2012
Сообщений: 105

Всем привет!

Скажите, пожалуйста, кто, вдруг, помнит!
Готов поклясться на "Библии пользователя AutoCAD" Элен нашей Финкельштейн, что есть переменная окружения, хранящая текущий системный десятичный разделитель (Windows).
Никак и нигде не могу найти: и поиск здесь на Форуме, и просто в Сети ничего не даёт.

А оно точно было - видел. Но пока не приходилось использовать - вот нигде в заначке и не сохранилось...
Просмотров: 1221
 
Непрочитано 11.01.2023, 08:03
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,840


Клянись, поскольку ACAD для разделителя целой и дробной всегда использует точку, независимо от настроек ОС
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2023, 08:05
#3
Florian Geyer


 
Регистрация: 04.12.2012
Сообщений: 105


Ну и что?
При чём тут "внутренние правила" AutoCAD? Я про реестр. Я про Windows.

Не понял смысла Вашего сообщения.
Florian Geyer вне форума  
 
Непрочитано 11.01.2023, 08:06
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,840


Цитата:
Сообщение от Florian Geyer Посмотреть сообщение
Ну и что?
При чём тут "внутренние правила" AutoCAD? Я про реестр. Я про Windows.

Не понял смысла Вашего сообщения.
А что тема делает в разделе AutoCAD? Кто ее сюда поместил?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 11.01.2023, 08:09
#5
Florian Geyer


 
Регистрация: 04.12.2012
Сообщений: 105


1. Вопрос про получение информации из реестра LISPом в AutoCADе путём (GETENV ...).
2. Поместил я.
Florian Geyer вне форума  
 
Непрочитано 11.01.2023, 08:32
#6
Автон

СЦБ
 
Регистрация: 09.03.2006
Иркутск
Сообщений: 78


Код:
[Выделить все]
 (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sDecimal")
Автон вне форума  
 
Непрочитано 11.01.2023, 08:48
#7
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Переменной окружения нет. Но есть DecimalSeparator Property (ActiveX)
Добраться до него легко в любой среде программирования.
Можно и в Автокаде через VBA. Можно и через VisuakLisp. Пример

Код:
[Выделить все]
 (vl-load-com)
(defun c:Example_DecimalSeparator()
    ;;; 寸法を作成して寸法値の小数点区切りを変更するサンプル
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
     
    ;;; 寸法の定義
    (setq AngleVertex (vlax-3d-point 0 0 0)
          FirstPoint (vlax-3d-point 2 2 0)
          SecondPoint (vlax-3d-point 1 4 0)
          TextPoint (vlax-3d-point 6 6 0))
 
    ;;; 寸法を作成
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq DimPointAngularObj (vla-AddDim3PointAngular modelSpace AngleVertex FirstPoint SecondPoint TextPoint))
     
    ;;; 精度を設定
    (vla-put-TextPrecision DimPointAngularObj acDimPrecisionFour)
     
    (vla-ZoomAll acadObj)
 
    ;;; 既定値を読み込み
    (alert (strcat "現在の 10 進数の区切り記号に設定 : [" (vla-get-DecimalSeparator DimPointAngularObj) "]"))
 
    ;;; オブジェクトの 10 進数の区切り記号プロパティを変更。
    (setq oldSeparator (vla-get-DecimalSeparator DimPointAngularObj))
    (setq newSeparator (getstring "\n区切り記号を入力 : "))
     
    (if (/= newSeparator "")
        ;;; 新しい小数点の記号、1 文字だけを使用すること
        (vla-put-DecimalSeparator DimPointAngularObj newSeparator)
    )
     
    (vla-Regen doc acAllViewports)
     
    ;;; 読み込み
    (alert (strcat "新しい 10 進数の区切り記号に設定 : [" (vla-get-DecimalSeparator DimPointAngularObj) "]"))
)
Тут комментарии и строки по-нашему, но поймете. Все равно ведь скоро придется изучать.

Т.е. разделитель получаем из (vla-get-decimalseparator vla-object )
Но вот vla-object может быть из списка Dim3PointAngular, DimAligned, DimAngular, DimArcLength, DimDiametric, Dimension, DimOrdinate, DimRadial, DimRadialLarge,DimRotated.

Т.е. надо иметь созданный размер. Это не очень удобно.

Когда мне это надо было, я создал свой COM-сервер на Delphi со всяческими переменными Windows и брал всё из него одним действием. Да наверняка такой есть и в самой Windows, а как из него читать можно посмотреть из примеров на VBA.

Ну а в ObjectArx или .Net это вообще элементарно.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 11.01.2023, 10:11
#8
Florian Geyer


 
Регистрация: 04.12.2012
Сообщений: 105


ЖУТЬ!
Спасибо за науку!

Но что-то мне кажется, это не Виндовсовский-то разделитель!
Раз уж мы его получаем через ACAD-OBJECT - и через его DOC...
Florian Geyer вне форума  
 
Непрочитано 11.01.2023, 11:08
#9
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Florian Geyer Посмотреть сообщение
Но что-то мне кажется, это не Виндовсовский-то разделитель!
Раз уж мы его получаем через ACAD-OBJECT - и через его DOC...
Ну а ACAD-OBJECT получает его из Windows, только это скрыто в его кишочках.
Но затем применяет его к размерам, да еще с возможностью изменения.
Вот этот измененный DecimalSeparator будет только внутри Автокада и для конкретного объекта.

На мой взгляд это излишне. Но есть программисты сторонники "полной свободы". Они и в некоторых электронных таблицах сделали возможность устанавливать разделитель для каждой ячейки. Они "хотели как лучше", но получилось "как всегда" - из-за этого возникает много ошибок.

Цитата:
Сообщение от Автон Посмотреть сообщение
(vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sDecimal")
Можно и так, это проще, но тут могут быть проблемы с доступом. Хоть HKCU и должен быть доступен всегда, но бывают нюансы. Лучше чтобы действующая Win отдавала данные через свой API.

Потому в разных средах разработки данные стараются брать не из реестра, а из модуля доступа к WinApi.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 11.01.2023, 11:59
#10
Florian Geyer


 
Регистрация: 04.12.2012
Сообщений: 105


Ух-х-х...
Гениально! Спасибо, маэстро! Ответ в самую точку!

Честно, мерещилось, что получить его как-то проще - но мог и ошибиться. Главное - помнил, что можно.
Но, поскольку это работает и получает именно то, что надо - спасибо Вам огромное!

А может, было не через ENTGET, а как-то через WScript.Shell? Опять путаю?
Florian Geyer вне форума  
 
Непрочитано 11.01.2023, 14:24
#11
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Florian Geyer Посмотреть сообщение
как-то через WScript.Shell
Там много чего можно. В том числе сделать что угодно с вашим компьютером.

Вот этим лучше не пользоваться. Это же дыра в безопасности, позволяющая выполнять посторонние скрипты. С чужого сайта или вложенные в email.

Нормальный сисадмин запрещает выполнение этих процессов.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 11.01.2023, 20:24
#12
Florian Geyer


 
Регистрация: 04.12.2012
Сообщений: 105


Уважаемый ShaggyDoc! Ещё раз спасибо за науку!
Получается, что WScript.Shell может просто (неожиданно!) не сработать на каком-то произвольном компьютере, на котором нормальный системщик "перекрыл кислород"!
Не подозревал!..
Florian Geyer вне форума  
 
Непрочитано 12.01.2023, 08:24
#13
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,381


Цитата:
Сообщение от Florian Geyer Посмотреть сообщение
Получается, что WScript.Shell может просто (неожиданно!) не сработать на каком-то произвольном компьютере, на котором нормальный системщик "перекрыл кислород"!
Не подозревал!..
Во времена DOS были популярны bat-файлы, с помощью которых безо всяких систем программирования можно было выполнять последовательности всяких полезных действий.

Когда перешли на Win95 в Майкрософт решили, что надо дать и там подобный инструмент. Да еще с потрясающими возможностями. Но он был рассчитан на законопослушных пользователей, применяющих на своем компьютере.

Когда массово стали использовать Интернет нехорошие люди быстро сообразили, что скрипт можно встроить и в страницу, причем скрипт будет выполняться на компьютере пользователя. А IntenetExplorer включая версию 5 с радостью выполнял любые скрипты. Да хоть диск отформатировать.

И почтовые клиенты от Майкрософт тоже по умолчанию открывали вложения без спроса. Ну а для 12-летних "кулхацкеров" даже в журналах публиковали примеры.

Конечно, дыры в защите постепенно закрывались (делая новые), но творчество масс остановить нельзя. До сих пор приходят письма, в которые вложен какой-нибудь vbs с открытым текстом.

Поэтому правильные сисадмины блокируют выполнение WScript. Но ведь выросло и новое поколение, не помнящее об этом. Да и теперь у каждого свой компьютер есть.

А в своих программах WScript.Shell не стоит использовать, хотя иногда шаловливые ручки так и тянутся.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 12.01.2023, 19:25
#14
Florian Geyer


 
Регистрация: 04.12.2012
Сообщений: 105


Уважаемый ShaggyDoc!
Спасибо! Принято к сведению! Постараюсь не хотеть применять! ; ))

----- добавлено через ~4 мин. -----
Уважаемый коллега Автон!

Прошу у Вас прощения за невнимательность и тормознутость!
Я обрадовался Вашему примеру, думаю, именно его и имел в виду (раз уважаемое сообщество - по крайней мере пока - не вспомнило вариант с GETENV'ом)!
И именно его я и имплантирую в свой код!

Спасибо Вам за своевременную и попавшую в точку помощь!
Florian Geyer вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Узнать системный десятичный разделитель через переменную окружения (среды) с помощью GETENV

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как начертить фасад с помощью геодезической съемки через видовые экраны? Bleba AutoCAD 22 20.11.2013 15:37
Площадь штриховки не узнать через свойства Hans667 AutoCAD 24 01.11.2012 16:16
Печать нестандартных размеров листа с помощью плоттера, подключенного через маршрутизатор _Nikita_ Прочее. Программное обеспечение 3 02.09.2010 10:25
Как настроить выход в интернет с комуникатора через блютуз и ПК KonGo Разное 15 01.04.2010 18:46
Как с помощью VBA в Exel подключить AutoCAD. У меня работает через раз. Пример во вложении pungarov Программирование 9 25.02.2010 16:39