Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 4
Всего онлайн: 4
Зарегистрировано юзеров: 5977
Комментариев на сайте: 630
Новый юзер: deenama2



Последние комментарии
c
Theihpled прокомментировал "Урок 62 - Методы, наследование классов, операции с классами Delphi, (часть 4/6)":
Здравствуйте, Савельев Александр. У меня к вм небольшой вопрос по языку https://cloud.mail.ru/public/KFS1/dYUrFbaTU . Cпасибо за уроки.
Theihpled прокомментировал "Урок 54 - Потоки в Delphi, (часть 2/3)":
Кстати да. С потоками тоже ничего не вышло.



Мы в соцсетях
c
Delphi
Запустить файл, указанный в реестре

В реестре имеется в определенной ветке строковый параметр. Необхдимо считать его содержимое (в нем хранится путь к файлу) и запустить его. Напишим функцию которая будет это делать. Нам понадобятся 2 модуля (Registry, ShellAPI), которые необходимо будет добавить в раздел uses. первый для работы с реестром. Из второго нам потребуется функция ShellExecute.

uses Registry, ShellAPI;
...
function Run(root: HKEY; Path, NameKey: String): boolean;
var Reg:TRegistry;
   PathFile: string;
begin
  Result := true;
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_CURRENT_USER;
  if Reg.OpenKey(Path, false) = false then
  begin
    result := false;
    exit;
  end;
  PathFile := Reg.ReadString(NameKey);
  Reg.Free;

  ShellExecute(Application.Handle, 'open', PAnsiChar(PathFile), nil, nil, SW_Normal);
end;
Теперь немного о коде который написали. С помощью TRegistry.Create мы создаем объект типа TRegistry, при помощи которого будем получать доступ к реестру. Далее указываем корень. Думаю если хотябы раз заходили в реестр с помощю того же самого Regedit.exe (пуск -> Выполнить -> regedit) поняли для чего это нужно. Чуть ниже идет условие, в котором выполняется функция OpenKey. Функция возвращает false если указаной ветки не найдено, либо произошла какая-нибудь другая ошибка. При возникновении ошибки, мы возвращаем функции Run значение false и завершаем её выполнение.

На заметку:
Если в функции OpenKey второй параметр установить в True, то если окажется что открываемой ветки не окажется - она создастся

После условия, если все прошло без ошибок, читаем параметр с именем NameKey (его передаем в функцию Run в качестве одного из параметров). После чего, нам уже не нужен объект Reg (к реестру уже доступ не нужен, все, что было нужно мы получили) и мы освобождаем занимаемую им память.

На заметку:
В функции ShellExecute я использовал в качестве одного из параметров значение, которое возвращает функция PAnsiChar. Но в Delphi 2009 произошли изменения и теперь функция ShellExecure требует в качестве параметра PWideChar. В этом случае нужно будет использовать функцию таким образом:
ShellExecute(Application.Handle, 'open', PWideChar(PathFile), nil, nil, SW_Normal);
Далее нужно использовать эту функцию. В качестве примера, положим на форму кнопку и создадим обработчик события OnClick. Функция запустит файл указанный в строковом параметре с названием file который находится в HKEY_CURRENT_USER\SOFTWARE\.
procedure TForm1.Button1Click(Sender: TObject);
begin
  Run(HKEY_CURRENT_USER, '\SOFTWARE\', 'file')
end;

Вот и всё, Удачи!

Источник: www.thedelphi.ru
Автор: Савельев Александр
Опубликовано: 8 Июня 2014
Просмотров: 127811


Зарегистрируйтесь или авторизуйтесь, чтобы добавлять комментарии.