Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Shur1k_ua
0 / 0 / 3
Регистрация: 01.06.2012
Сообщений: 141
1

работа с реестром

31.07.2013, 17:32. Просмотров 940. Ответов 5

Здравствуйте. Не знаю, как описать.
Вообщем есть файлик и он лежит так, D:\мои программы\ICQ\icq.exe и там есть файл icq.dll тд и тп. Пишу мини программку, чтоб не парится с поиском, где лежит аська и хочется её запустить. не надо мне говорить о ярлыках, у меня жестяки запускаются по разному и диски бывают рандомными по имени... я о флешках.

Смотрите, в реестре есть такой путь к этой dll
как мне скопировать этот путь и при нажатии кнопки button, запускалась не длл-ка а именно екзешник.
типа того:
Run(HKEY_CURRENT_USER, '\Software\icq\ActiveProcess', 'IcqClientDll')
'IcqClientDll' - это ключ в реестре. и там вписано
d:\мои программы\ICQ\icq.dll
по сути путь я получил, а вот каким макаром запустить exe. не думаю, что єто назівается вируснёй
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 17:32
Ответы с готовыми решениями:

Работа с реестром
Доброго времени суток!!! Задание следующее: 2. Написать приложение для...

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

Работа с реестром
в общем нужно чтобы моя программка запускалась даже в безопасном(если...

Работа с реестром 32 и 64
Хочу прописать программу в автозагрузку по ветке...

Работа с реестром
Вот нашел как добавть и удалить ключ реестра , а как проверить есть ли уже етот...

5
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
31.07.2013, 17:37 2
Цитата Сообщение от Shur1k_ua Посмотреть сообщение
путь я получил
Ну так пришпандорь справа к пути 'icq.exe' - имя исп.файла тебе же заранее известно - и запускай его себе на здоровье, в чем проблема-то ?
0
Shur1k_ua
0 / 0 / 3
Регистрация: 01.06.2012
Сообщений: 141
31.07.2013, 17:42  [ТС] 3
не понял. дело в том, что реестр мне показал полный путь к программе. Мне бы копирнуть этот путь и запустить там icq.exe
0
mss
2634 / 2258 / 276
Регистрация: 24.12.2010
Сообщений: 13,725
31.07.2013, 17:49 4
Цитата Сообщение от Shur1k_ua Посмотреть сообщение
Мне бы копирнуть этот путь
см. ExtractFilePath()
0
Shur1k_ua
0 / 0 / 3
Регистрация: 01.06.2012
Сообщений: 141
31.07.2013, 18:16  [ТС] 5
можно как то функцией показать ?
0
Mawrat
12833 / 5741 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
31.07.2013, 22:12 6
Действовать можно так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
uses
  Registry, ShellAPI;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Имя исполняемого файла.
  Fn = 'icq.exe';
  //Раздел реестра.
  RootKey = HKEY_CURRENT_USER;
  //Имя ключа в реестре.
  KeyName = '\Software\Icq\ActiveProcess';
  //Имя параметра в реестре.
  ValueName = 'IcqClientDll';
var
  Reg : TRegistry;
  FileName, Params : String;
begin
  Reg := TRegistry.Create;
  try
    //Подключаемся к разделу реестра.
    Reg.RootKey := RootKey;
    //Пытаемся открыть ключ реестра.
    if not Reg.OpenKey(KeyName, False) then begin
      MessageBox(Handle, PChar('Не удалось открыть ключ:'#13#10'"'
        + KeyName + '"'#13#10'Действие отменено.'),
        'Ошибка!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
      FreeAndNil(Reg);
      Exit;
    end;
    //Проверяем существование параметра.
    if not Reg.ValueExists(ValueName) then begin
      MessageBox(Handle, PChar('Параметр "' + ValueName
        + '" в реестре не найден. Действие отменено.'),
        'Ошибка!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
      FreeAndNil(Reg);
      Exit;
    end;
    //Читаем значение параметра.
    FileName := Reg.ReadString(ValueName);
  finally
    FreeAndNil(Reg);
  end;
 
  //Формируем путь к файлу.
  FileName := ExtractFilePath(FileName) + Fn;
  //Проверка существования файла на диске.
  if not FileExists(FileName) then begin
    MessageBox(Handle, PChar('Файл с именем:'#13#10'"'
      + FileName + '"'#13#10'не найден. Действие отменено.'),
      'Ошибка!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    FreeAndNil(Reg);
    Exit;
  end;
 
  //Пытаемся запустить приложение.
  Params := ''; //Если требуется передать какие-то параметры командной строки.
  ShellExecute(Handle, nil, PChar(FileName), PChar(Params), nil, SW_SHOW);
end;
Добавлено через 57 минут
Из личной переписки выяснилось, что для правильной работы запускаемого приложения (в данном случае - icq.exe) требуется, чтобы при его запуске текущей папкой бала та папка, где лежит этот исполняемый файл. В этом случае в коде, перед запуском icq.exe, следует сменить текущую папку на ту, где лежит icq.exe. А после запуска текущей папкой вновь надо сделать ту, которая была текущей перед запуском. Делается это с помощью GetCurrentDir()/SetCurrentDir():
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
uses
  Registry, ShellAPI;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  //Имя исполняемого файла.
  Fn = 'icq.exe';
  //Раздел реестра.
  RootKey = HKEY_CURRENT_USER;
  //Имя ключа в реестре.
  KeyName = '\Software\Icq\ActiveProcess';
  //Имя параметра в реестре.
  ValueName = 'IcqClientDll';
var
  Reg : TRegistry;
  FileName, Params, CurDir : String;
begin
  Reg := TRegistry.Create;
  try
    //Подключаемся к разделу реестра.
    Reg.RootKey := RootKey;
    //Пытаемся открыть ключ реестра.
    if not Reg.OpenKey(KeyName, False) then begin
      MessageBox(Handle, PChar('Не удалось открыть ключ:'#13#10'"'
        + KeyName + '"'#13#10'Действие отменено.'),
        'Ошибка!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
      FreeAndNil(Reg);
      Exit;
    end;
    //Проверяем существование параметра.
    if not Reg.ValueExists(ValueName) then begin
      MessageBox(Handle, PChar('Параметр "' + ValueName
        + '" в реестре не найден. Действие отменено.'),
        'Ошибка!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
      FreeAndNil(Reg);
      Exit;
    end;
    //Читаем значение параметра.
    FileName := Reg.ReadString(ValueName);
  finally
    FreeAndNil(Reg);
  end;
 
  //Формируем путь к файлу.
  FileName := ExtractFilePath(FileName) + Fn;
  //Проверка существования файла на диске.
  if not FileExists(FileName) then begin
    MessageBox(Handle, PChar('Файл с именем:'#13#10'"'
      + FileName + '"'#13#10'не найден. Действие отменено.'),
      'Ошибка!', MB_OK + MB_ICONERROR + MB_APPLMODAL);
    FreeAndNil(Reg);
    Exit;
  end;
 
  //Запоминаем текущую папку.
  CurDir := GetCurrentDir;
  //Устанавливаем текущей ту папку, где расположено запускаемое приложение.
  SetCurrentDir(ExtractFilePath(FileName));
 
  //Пытаемся запустить приложение.
  Params := ''; //Если требуется передать какие-то параметры командной строки.
  ShellExecute(Handle, nil, PChar(FileName), PChar(Params), nil, SW_SHOW);
 
  //Устанавливаем текущей прежнюю папку.
  SetCurrentDir(CurDir);
end;
2
31.07.2013, 22:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 22:12

Работа с реестром
Подскажите в чем проблема. Написал такую процедуру она выдает ошибку: ...

Работа с реестром
Как создать файл в реестре или спрятать файл так, чтобы пользователь не нашёл,...

РАбота с реестром
Как реализовать работу с реестром:поиск неверных ссылок на файлы


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru