Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.05.2015, 02:38
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Как дождаться загрузки виртуального диска и запустить программу?

Здравствуйте!

Делаю ланчер для игры. При нажатии на кнопку "Play" по идее должен запускаться Daemon Tools с параметрами для загрузки образа, после чего должна запускаться сама игра.

Делаю так:
Код:
procedure TForm1.btn1Click(Sender: TObject);
begin
ShellExecute(0, nil, Pchar(DTLiteDir),PChar('-mount dt, "'+ExtractFilePath(Application.ExeName)+'img\mygame.cue"'), nil, SW_RESTORE);
ShellExecute(0, nil, Pchar(ExtractFilePath(Application.ExeName)+'MyGame.exe'),PChar(Keys), nil, SW_RESTORE);
end;

проблема в том, что образ не всегда успевает загружаться, как игра стартует.. Подскажите как решить эту задачу.
Может быть зациклить функцию на сканирование CD-ROM'ов и пока не загрузится не запускать саму игру... может быть есть другие способы проверить... как лучше и логичнее сделать?
Ответить с цитированием
  #2  
Старый 25.05.2015, 08:22
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

CreateProcess & WaitForSingleObject >>= Google.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Alloc (25.05.2015)
  #3  
Старый 25.05.2015, 11:51
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо за подсказку. А как быть если я запускаю игру через командную строку, вот так:

Код:
 function StartFileAndWait(CommandString: string): boolean;      //âõîä - êîìàíäà çàïóñêà
var
	si: TStartupInfo;
	pi: TProcessInformation;
begin
	Result := False;
	ZeroMemory( @si, sizeof( si ) );
	si.cb := SizeOf( si );
	if not CreateProcess( nil, // No module name (use command line).
		PChar( CommandString ), // Command line.
		nil, // Process handle not inheritable.
		nil, // Thread handle not inheritable.
		False, // Set handle inheritance to FALSE.
		0, // No creation flags.
		nil, // Use parent's environment block.
		nil, // Use parent's starting directory.
		si, // Pointer to STARTUPINFO structure.
		pi ) // Pointer to PROCESS_INFORMATION structure.
	then
	begin
    result:=false;
		Exit;
	end;
	WaitForSingleObject( pi.hProcess, INFINITE );
	CloseHandle( pi.hThread );
	CloseHandle( pi.hProcess );
  Application.BringToFront;
  Result := True;
end;

Код:
if StartFileAndWait(DTLiteDir+' -mount dt, "'+ExtractFilePath(Application.ExeName)+'img\mygame.cue"') then
   if StartFileAndWait('cmd.exe /c start /affinity 1 /d '+'"'+ExtractFileDir(Application.ExeName)+'MyGame.exe "'+'"'+Keys+"') then
      ShowMessage('Программа закрыта');

если я сделаю так то программа будет ждать завершения не "MyGame.exe" а "cmd.exe"... как решить задачу?
Заранее спасибо.

Последний раз редактировалось Alloc, 25.05.2015 в 12:18.
Ответить с цитированием
  #4  
Старый 25.05.2015, 12:54
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
if StartFileAndWait(DTLiteDir+' -mount dt, "'+ExtractFilePath(Application.ExeName)+'img\mygame.cue"') and StartFileAndWait('cmd.exe /c start /affinity 1 /d '+'"'+ExtractFileDir(Application.ExeName)+'MyGame.exe "'+'"'+Keys+"') then
      ShowMessage('Программа закрыта');
По идее, кмд должна джать закрытия дочернего процесса.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение:
Alloc (25.05.2015)
  #5  
Старый 25.05.2015, 16:01
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

спасибо, я попробую
Ответить с цитированием
  #6  
Старый 26.05.2015, 00:17
Аватар для Alloc
Alloc Alloc вне форума
Начинающий
 
Регистрация: 17.09.2014
Сообщения: 104
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

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

Код:
procedure TForm1.PlayGameClick(Sender: TObject);
var
  i: integer;
  CDFix: boolean;
begin
if chk4.checked then
begin
  i:=0; 
  CDFix:= false;
  while CDFix = true do
  begin
    if ExtractRes('EXEFILE','devcon', ExtractFilePath(Application.ExeName)+'devcon.exe') and
       StartFileAndWait(ExtractFilePath(Application.ExeName)+'devcon.exe disable *cdrom*') then
	   begin
         CDFix:= True; 
		 i:=0;
		 Break;
	   end else	 
	   begin 
	     i:=i+1;
	     CDFix:= False;
		 if i=10 then
		 begin
		   lbl2.caption:= 'Не удалось отключить физический привод!';
		   Exit;
		 end;
	   end;
  end;

StartFileAndWait('cmd.exe /c start /affinity 1 /d '+'"'+ExtractFileDir(Application.ExeName)+'MyGame.exe "'+'"'+Keys+"')
end;

заранее спасибо!

Последний раз редактировалось Alloc, 26.05.2015 в 11:47.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025