25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
1

Работа с типом строк REG_EXPAND_SZ в Delphi

27.06.2012, 12:11. Показов 3026. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как прочитать в Edit1.Text значение ключа реестра с типом REG_EXPAND_SZ. Гугля не принесла результата, уже не первый раз сталкиваюсь и осилить не могу. Подскажите.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2012, 12:11
Ответы с готовыми решениями:

Работа в Delphi 7 с типом записью
Доброй ночи. Писал программу и столкнулся с проблемой. Задание: Пользователь ICQ решил создать...

Symfony2, работа с типом Collection, работа с базовой формой
Здравствуйте. Осваиваю создание CRUD приложения на Symfony 2, на примере. Однако, возникают...

Помогите с типом данных в DELPHI
Привет!!! У меня вот какой вопрос. Нужно написать небольшую програмку на DELPHI. На форме должно...

Сравнение строк с типом string
Приветствую уважаемые посетители сей темы! Хотелось бы узнать как можно сравнить переменную типа...

16
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
27.06.2012, 13:56 2
Воспользоваться SHRegGetPath - не вариант? Она и подставит значение environment variables где нужно.
1
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
27.06.2012, 18:49  [ТС] 3
Я эту статью первым делом прочитал, но так и не уловил, как получить из REG_EXPAND_SZ строку и вывести её в поле edit, например.
0
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
27.06.2012, 21:35 4
http://www.swissdelphicenter.c... hp?id=2008
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
27.06.2012, 21:47 5
Зачем это всё? Есть же одна-единственная функция. Прекрасно читает нужные данные:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
uses Shlwapi;
 
procedure TForm1.Button6Click(Sender: TObject);
var s : array[0 .. MAX_PATH] of Char;
begin
   // RootKey - корневая ветка
   // Name - ветка
   // Value - ключ, значение которого надо прочесть
   SHRegGetPath(RootKey, Name, Value, s, 0);
 
   Edit1.Text := s;
end;
Что не так?
1
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
28.06.2012, 04:16  [ТС] 6
Здорово, но в Delphi7 проекте не работает, т.к. нема в нем Shlwapi
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
28.06.2012, 09:59 7
Значит, объяви вот так:
Delphi
1
2
3
4
5
uses Windows;
 
function SHRegGetPath(hkey : HKEY; pszSubKey : PChar; pszValue : PChar;
      pszPath : PChar; dwFlags : DWORD) : LongInt; stdcall;
      external 'Shlwapi.dll' name 'SHRegGetPathA';
, и используй.
1
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
28.06.2012, 21:28  [ТС] 8
Огромнейшее Спасибо с большой буквы! Наконец решил проблему!
А можно еще вопрос? Как из Стринг обратно переделать в REG_EXPAND_SZ и записать значение в реестр?
Полагаю, что должна быть функция типа SHRegSetPath судя по аналогии я прав? ну будьте любезны подскажите и её реализацию.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
28.06.2012, 21:44 9
Цитата Сообщение от Ralik Посмотреть сообщение
Полагаю, что должна быть функция типа SHRegSetPath
Ну ведь там же. на той же странице в MSDN, на которую я давал ссылку выше, есть полный список функций для работы с реестром. SHRegSetPath function - одна из них. Использует PathUnExpandEnvStrings для замены полных путей на переменные окружения, и полученную строку пишет в реестр.

Прототип на Дельфи выглядит точно так же, как и для ...GetPath, только имя меняется:
Delphi
1
2
3
function SHRegSetPath(hkey : HKEY; pszSubKey : PChar; pszValue : PChar;
      pszPath : PChar; dwFlags : DWORD) : LongInt; stdcall;
      external 'Shlwapi.dll' name 'SHRegSetPathA';
1
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
28.06.2012, 23:27  [ТС] 10
Ну я тупой, пробую вот так
Delphi
1
SHRegSetPath(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\services\ЬнЫукмшсу', 'ImagePath', 'C:\Windows\System32\mysvc.exe', 0);
не срабатывает
0
1302 / 708 / 107
Регистрация: 25.05.2011
Сообщений: 2,158
Записей в блоге: 51
28.06.2012, 23:38 11
Ralik похоже опять вирус пишет
0
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
28.06.2012, 23:40  [ТС] 12
Alex_pac, скорее наоборот,пишу антивирус противостоящий заражению компьютера порно-банерами. Если есть желающие подключиться, то Ласково Просiмо.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
28.06.2012, 23:48 13
Delphi
1
2
3
4
5
6
Var Res : Cardinal;
 
Res := SHRegSetPath(HKEY_LOCAL_MACHINE,
   'SYSTEM\CurrentControlSet\services\ЬнЫукмшсу', 'ImagePath', 
   'C:\Windows\System32\mysvc.exe', 0);
ShowMessage(IntToStr(Res));
что выводит? У меня D2009, проект сохранен в UTF8, поэтому пришлось изменить

Delphi
1
2
// external 'Shlwapi.dll' name 'SHRegSetPathA';
external 'Shlwapi.dll' name 'SHRegSetPathW';
, тогда заработало (если ключ уже присутствует в реестре и ты пишешь только значение, конечно. Если ключа нет, и ты пытаешься записать в него - будет ошибка)
1
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
28.06.2012, 23:49  [ТС] 14
А как создать ключ? Это и нужно для того, чтобы служба мониторила свои парамеры запуска и если обнаружила удаление, то восстановить должна.
Delphi
1
ShowMessage(IntToStr(Res));
выдает 87
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
29.06.2012, 00:00 15
Цитата Сообщение от Ralik Посмотреть сообщение
А как создать ключ?
Delphi
1
2
3
4
var k : HKEY;
 
RegCreateKey(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\services\ЬнЫукмшсу', k);
// а вот теперь можешь в него заносить значение
1
25 / 14 / 1
Регистрация: 13.08.2010
Сообщений: 330
29.06.2012, 00:18  [ТС] 16
Delphi
1
2
3
4
5
6
7
8
9
function SHRegSetPath(hkey : HKEY; pszSubKey : PChar; pszValue : PChar;
      pszPath : PChar; dwFlags : DWORD) : LongInt; stdcall;
      external 'Shlwapi.dll' name 'SHRegSetPathW';
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
//RegCreateKey(HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\services\MySVC', k);
 SHRegSetPath(HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\services\MySVC', 'ImagePath', 'C:\Windows\System32\MySVC.exe', 0);
Сделал так. Где ошибка? Запись не происходит
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32830 / 21168 / 8147
Регистрация: 22.10.2011
Сообщений: 36,429
Записей в блоге: 8
29.06.2012, 09:52 17
Цитата Сообщение от Ralik Посмотреть сообщение
Запись не происходит
Опять за своё? Что SHRegSetPath возвращает? Код ошибки какой? Ключ уже создан на момент, когда пытаешься записать значение?

И это, у тебя D7, убери изменения, оставь SHRegSetPathA лучше. Я же уточнил, что под 2009 отработало, у тебя ANSI-приложение, тем более что кириллицы в путях теперь нет.
0
29.06.2012, 09:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2012, 09:52
Помогаю со студенческими работами здесь

Разработка программы со строковым типом данных с использованием компонент Delphi
Ребят, помогите пожалуйста, на завтра очень нужно!!! Ввести две строковые последовательности из...

Разработка программы со строковым типом данных с использованием компонент Delphi.
Ввести две строковые последовательности из 10-ти или меньшего количества элементов, и сформировать...

Как создать ключ в реестре типа REG_EXPAND_SZ?
Есть у меня старый модуль: Public Const REG_SZ As Long = 1 Public Const REG_DWORD As Long = 4...

Работа с типом float
Суть програмы: в текстовом док-те содержится квадратная матрица вещественных чисел, которую надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru