Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Запуск приложения


Автор: Cron 25.5.2007, 12:08
Простите если на форуме это уже обсуждали.

Я совсем недавно начал изучать Delphi, поэтому мой вопрос может показаться глупым. Через программу (нажатием кнопки) требуется запустить exe файл игры, но перед этим считать адрес каталога в который была установлена игра из ключа в реестре (расчитываю что программа будет использоваться разными людьми, следовательно и пути к игре разные). Обьясните пожалуйста как это можно осуществить? smile 

Автор: Exai1e 25.5.2007, 12:19
Код

ShellExecute(Handle,nil,'notepad.exe',nil,nil,SW_SHOWNORMAL);


Последний параметр управляет видимостью и активностью запущенной программы на экране.
Через ShellExecute() также можно запускать ассоциированную с тем или иным файлом программу:

Код

ShellExecute(Handle,'open','pd.doc',nil,nil,SW_SHOWNORMAL);


- запустит MS Word (или другую программу, ассоциироанную для запуска *.doc файлов) и загрузит в него файл pd.doc.

Код

WinExec('notepad.exe',SW_SHOWNORMAL);



WinExec() легче в использовании, однако давно уже устарела и не рекомендуется к использованию, оставлена только в целях совместимости с 16-ти разрядными приложениями.


взято из faq

Добавлено через 2 минуты и 53 секунды
насчет реестра - глянь на форуме, скорей всего должен быть гденить ответ smile
или глянь drkb (вроде так...) или faq

Автор: Cron 25.5.2007, 14:23
Дело в том что кода и описания работы с реестром много а нужного нет, тоесть я не понимаю как приспособить его к своей программе.

Автор: Snowy 25.5.2007, 14:25
Попробуй поиск по слову TRegistry  smile 

Автор: Guedda 25.5.2007, 14:28
Код

uses
  ..., Registry,...


procedure Zapusk;
var
  Reg : TRegistry;
  Str : string;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE; //Здесь выбираешь ветку реестра
  Reg.OpenKey('MyGame\ThisDirOfMyGame', false); //Здесь открываешь путь по дереву к значению
  Str := Reg.ReadString('MyDirGame'); //Здесь считываешь значение переменной
  Reg.CloseKey; // Закрываешь реестр
  Reg.Free;
  ShellExecute(Handle,nil,Str,nil,nil,SW_SHOWNORMAL); //Запускаешь игру
end;

Автор: Cron 25.5.2007, 15:11
Цитата(Guedda @ 25.5.2007,  14:28)
Код

uses
  ..., Registry,...


procedure Zapusk;
var
  Reg : TRegistry;
  Str : string;
begin
  Reg := TRegistry.Create;
  Reg.RootKey := HKEY_LOCAL_MACHINE; //Здесь выбираешь ветку реестра
  Reg.OpenKey('MyGame\ThisDirOfMyGame', false); //Здесь открываешь путь по дереву к значению
  Str := Reg.ReadString('MyDirGame'); //Здесь считываешь значение переменной
  Reg.CloseKey; // Закрываешь реестр
  Reg.Free;
  ShellExecute(Handle,nil,Str,nil,nil,SW_SHOWNORMAL); //Запускаешь игру
end;

Ругаетсяи и не запускает программу
Код

  [Error] Unit1.pas(83): Incompatible types: 'String' and 'PAnsiChar'
  [Fatal Error] Project1.dpr(6): Could not compile used unit 'Unit1.pas'

Автор: Guedda 25.5.2007, 15:15
Фуф... Ну напиши вместо:
Код

ShellExecute(Handle,nil,Str,nil,nil,SW_SHOWNORMAL); //Запускаешь игру

вот это:
Код

ShellExecute(Handle,nil,PChar(Str),nil,nil,SW_SHOWNORMAL); //Запускаешь игру

Автор: Cron 25.5.2007, 15:25
Guedda Спасибо огромное!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)