11.14 Переменные окружения стр.1
Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.
В ряде случаев надо уметь читать и устанавливать переменные окружения, такие, например, как PATH и другие. Прочитать полный список переменных окружения текущего процесса можно с помощью функции Get Environment Strings, объявленной в модуле Windows следующим образом:
function GetEnvironmentStrings: PChar; stdcall; // в VCL Win32 function GetEnvironmentStrings: IntPtr; // в VCL .NET
Функция возвращает адрес блока строк вида имя_переменной=значение
Эти строки можно только прочитать. Изменять значения переменных с помощью этих строк невозможно.
После того как вы извлекли информацию из блока переменных окружения, блок надо удалить функцией FreeEnvironment St rings:
function FreeEnvironmentStrings(EnvBlock: PChar): BOOL; // VCL Win32 function FreeEnvironmentStrings(EnvBlock: string): BOOL;// VCL .NET
В качестве аргумента EnvBlock в нее надо передать тот адрес, который ранее вернула функция GetEnvironmentStrings.
Функция GetEnvironmentStrings используется в 32-разрядных версиях Windows. В 16-разрядных Windows вместо нее используется аналогичная функция GetDOSEnvironment. После получения информации о переменных окружения в этих случаях вызов FreeEnvironmentStrings не требуется.
Получить информацию о значении какой-то конкретной переменной окружения можно функцией Get Environment Variable, которая в модуле Windows объявлена следующим образом: в VCL Win32
Здесь lpName — указатель на строку с именем переменной, a lpBuffer и nSize — буфер и его размер. Но применять удобнее другую форму этой функции, объявленную в модуле SysUtils:
function GetEnvironmentVariable(const Name: string): string; overload; Здесь единственный аргумент Name — имя переменной.
Задать значение переменной окружения или создать новую переменную можно функцией Set Environment Variable: в VCL Win32
function SetEnvironmentVariable(lpName, lpValue: PChar): BOOL; stdcall; в VCL .NET
Параметр lpName — это имя переменной, параметр lpValue — задаваемое значение. Если параметр lpValue равен nil, то переменная lpName удаляется из списка переменных окружения данного процесса. Если переменной с именем lpName нет и lpValue не равняется nil, то создается переменная с заданным именем и значением.
Учтите, что функция SetEnvironmentVariable задает значение переменной только для данного процесса. Например, вы можете изменить значение переменной PATH, включив в него пути, требуемые для вашего приложения. Но другие приложения будут при этом работать со своими значениями переменных.
Пример, демонстрирующий применение рассмотренных функций, вы найдете на диске, приложенном к книге, в каталоге Windows в проекте PEnv. На рис. 11.7 приведено это приложение во время выполнения. Список ListBox 1 содержит перечень всех переменных окружения. Выделив в этом списке какую-то переменную, в окне Editl можно посмотреть ее значение. Если изменить это значение и нажать кнопку Изменить (Buttonl), то значение соответствующей переменной изменится.
Переменные среды WINDOWS в Delphi
Posted by admin on Четверг, Март 27, 2014 · Добавить комментарий
В Windows есть специальная функция, позволяющая получить пути к стандартным папкам.
В Delphi это будет выглядеть так:
function GetSpecialPath (CSIDL: word): string;
SetLength (s, MAX_PATH);
if not SHGetSpecialFolderPath (0, PChar (s), CSIDL, true)
result := PChar (s);
// Следующие идентификаторы имеются в модуле ShlObj:
// Виртуальный каталог, представляющий Рабочий стол. (Корень в проводнике)
// Виртуальный каталог для Internet Explorer.
// Меню Пуск -> Программы
// Виртуальный каталог, содержащий иконки пунктов панели управления
// Виртуальный каталог, содержащий установленные принтеры
// Виртуальный каталог, представляющий папку «Мои документы»
// До Vista ссылался на какталог «Мои документы» на жёстком диске
// Избранное. (обычно C:\Documents and Settings\username\Favorites)
// Пуск -> Программы -> Автозагрузка
// Недавние документы (обычно C:\Documents and Settings\username\My Recent Documents
// Для добавления ссылки документа используйте SHAddToRecentDocs
// Папка, содержащая ярлыки меню «Отправить» (Sent to. ) (обычно C:\Documents and Settings\username\SendTo)
// Виртуальный каталог, содержащий файлы в корзине текущего пользователя
// Элементы меню Пуск текущего пользователя (обычно C:\Documents and Settings\username\Start Menu)
// Рабочий стол текущего пользователя (обычно C:\Documents and Settings\username\Desktop)
// Виртуальный каталог, представляющий папку «Мой компьютер»
// Виртуальный каталог, представляющий «Сетевое окружение»
// Папка «My Nethood Places» (обычно C:\Documents and Settings\username\NetHood)
// В неё ссылки на избранные расшаренные ресурсы
// Папка, содержащая установленные шрифты. (обычно C:\Windows\Fonts)
// Шаблоны документов. (Обычно Settings\username\Templates)
// Элементы меню Пуск для всех пользователей. (обычно C:\Documents and Settings\All Users\Start Menu)
// Константы, начинающиеся на CSIDL_COMMON_ существуют только в NT версиях
// Меню Пуск -> программы для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs)
// Меню Пуск -> Программы -> Автозагрузка для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs\Startup)
// Элементы Рабочего стола для всех пользователей (обычно C:\Documents and Settings\All Users\Desktop)
// Папка, в которой рограммы должны хранить свои данные(C:\Documents and Settings\username\Application Data)
// Установленные принтеры. (обычно C:\Documents and Settings\username\PrintHood)
CSIDL_ALTSTARTUP = $001d; // DBCS
// user’s nonlocalized Startup program group. Устарело.
CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS
// Ссылки «Избранное» для всех пользователей
// Временные Internet файлы (обычно C:\Documents and Settings\username\Local Settings\Temporary Internet Files)
// Папка для хранения Cookies (обычно C:\Documents and Settings\username\Cookies)
// Хранит ссылки интернет истории IE
procedure TForm1.Button1Click (Sender: TObject);
Как переменную среды окружения привести к пути в обычном представлении
Как передать из ACCESS переменную STRING в переменную окружения (типа CMD команды SET=)
Добрый день! Подскажите как установить переменную окружения из ACCESS. Допустим у меня есть.
Как через переменные среды настрить язык рабочего окружения?
Всем доброго времени суток. Заранее прошу простить за такой глупый вопрос, но всё же, мне нужна.
Как создать переменную окружения?
Добрый день, читаю книгу по ассемблеру, но СОВСЕМ не понимаю, чего хочет автор. Помогите.
Калькулятор: Вывод результата в обычном численном представлении
Здравствуйте! Сделал калькулятор ( с функциями синус, кос и т.д., а также радиобутонами))градусы.
Решение
Решение
Можно через ExpandEnvironmentStrings получить путь. Пример
Нет ее в этом списке, но есть в .lnk файлах откуда моя прога берет пути к файлам. Венда её отлично понимает и открывает файлы на которые ссылаются такие ярлыки, но делфи упорно посылает меня на х%#.
Добавлено через 2 минуты
голова уже болит от тонн бесполезного текста на тему переменных окружения
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Как изменить глобальную переменную окружения
Как программно на си поменять глобальную переменную окружения. То есть если я использую setenv().
Как использовать переменную окружения %appdata%?
Скажите, плиз, как использовать переменную окружения %appdata% в TFileStream Например, пишешь.
Переменные окружения (среды) Windows XP
Нужно на большом количестве компьютеров изменить переменное окружение — добавить довольно много.
Как из переменной окружения сделать обычную переменную?
В общем, такая ситуация: нужно переменную окружения PATH сделать обычной переменной. Каким образом.
Переменные среды Windows
Приветствую Уважаемые форумчане!
Есть у меня функция для извлечения
из переменной полного пути.
Собственно вопрос, на сколько правильное решение и правильное ли оно вообще, для определения указанной директории
>>> C:\Users\Igor\AppData\Roaming 0
Переменные Среды (Использование готового кода)
Накопал на сайте Код для получения переменных сред. procedure GetEnvironmentStrings(ss:TStrings);.
Переменные среды Windows
Доброго времени всем! Так и не врубился, как заставить код понимать переменные среды Windows.
Переменные среды windows
Я только начинаю изучать, для меня все очень сложно. Есть такой код #include #include.
Переменные среды Windows
Как в c++ использовать переменные среды windows? Например я хочу открыть текстовый файл в.
Мне нужна директория C:\Users\Igor\AppData\Roaming
Работать программа будет на разных компьютерах
C:\Users\Igor\AppData\Roaming
C:\Users\Vasy\AppData\Roaming
C:\Users\Pety\AppData\Roaming
C:\Users\Алёша\AppData\Roaming
А там что я буду делать в этой директории.
Добавлено через 3 минуты
Есть еще функция
По константе, но по константе не удобно.
Так как мне хотелось бы передавать в качестве аргумента не константу, а для примера %AppData%\Temp\Хрень\
в итоге должно получится C:\Users\Алёша\AppData\Roaming\Temp\Хрень\
Добавлено через 2 минуты
Чем больше я погружаюсь в мир программирования для Windows тем больше вопросов бле**** . о_О
Всякие не стыковки. У меня все работает, у заказчика нет че за хрень.
Ну у меня констант много, смотрите
Но, мне нужно передавать в качестве аргумента %AppData%\Temp\Хрень\
Добавлено через 2 минуты
я же не передам вот так
Конечно можно написать свой костыль.
Что то типа
%AppData%\Temp\Хрень\
Когда я буду в своей программе составлять некий скрипт, что бы не писать полный относительный путь я буду использовать переменные среды. Я же не телепат что бы узнать какое имя у пользователя (хотя есть некие телепатические способности, можно так же средствами Delphi определить имя пользователя а потом вставить куда нужно, но зачем?)
Хочу ограничится %AppData%. Ну если переменные среды совместимы со всеми версиями ОС то это ЗБС.
У меня Win 7 x64
Я думаю что не стоит так заморачиваться, но если не сложно, да бы пролить свет.
желаемые ос это все что выше семерки.
Следовательно не париться, все будет работать.
Добавлено через 12 секунд
Спасибо.
IncludeTrailingPathDelimiter — проверяет и добавляет слэш-разделитель в конец, если его нет
ExcludeTrailingPathDelimiter — проверяет и удаляет слэш-разделитель в конце, если он есть
Добавлено через 46 секунд
с другой стороны, можно и самому подумать и написать функцию проверки в две строки
жестяк! зачем добавлять символ, чтобы тут же его убрать?
ExtractFilePath ВСЕГДА возвращает путь с разделителем в конце, а разделителем может быть и не слэш (зависит от настроек ОС). в этом плане и IncludeTrailingPathDelimiter оперирует с системным разделителем
Добавлено через 2 минуты
да ладно. Теоретически это так, но должно быть какое то соглашение, не верю в ерунду, где бы я ни был, везде видел разделитель \
Вы с какой планеты?
И какие разделители Вы видели?
Добавлено через 1 минуту
Да, и скажите еще что Email адрес, что бы отделить домен от имени адреса у Вас используют # )))
Добавлено через 5 минут
Да, к стати, идея.
Илон Маск колонизирует марс, вот там можно использовать альтернативы, \ заменить на |, а @ на #
возможно, я спутал с другим каким-то разделителем, не отрицаю, но..
1. если есть предопределенные функции, реализующие необходимый функционал, то
2. нахрена создавать даже не костыли, а обрубки костылей, добавляя, а затем убирая один и тот же символ?!
Добавлено через 54 секунды
вот именно, если кроссплатформенное приложение, то весь твой костыль, popryduhin, сломается с веселым треском
Добавлено через 1 минуту
а в исходниках делфи указано
и дельфийские функции работают именно с этой константой
Добавлено через 3 минуты
кстати, модераторы, баг с подсветкой кода с участием директивы компилятора. ведь значение в кавычках долно отображаться как строковое
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Переменные окружения (среды) Windows XP
Нужно на большом количестве компьютеров изменить переменное окружение — добавить довольно много.
Переменные среды Windows в строке, считанной из файла
Задача: есть текстовый файл, в котором записаны пути к файлам или папкам. Требуется, например.
Переменные среды
Например, я скачал и разархивировал JDK. Как сделать так, чтобы он был виден системе, т. е. если я.
Переменные среды — II
Ребята, вот что у меня получилось. Работает. .
Переменные среды
Привет ! Вот записал в переменные среды такую штуку : RESIN_HOME=@#$. Хочу ее прочитать в.
Переменные среды
У меня такая же проблема, как у автора. Тоже проверял на подлинность. Потом перестал работать офис.