![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Здравствуйте!
Делаю ланчер для игры. При нажатии на кнопку "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
|
||||
|
||||
![]() CreateProcess & WaitForSingleObject >>= Google.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Alloc (25.05.2015)
|
#3
|
||||
|
||||
![]() Спасибо за подсказку. А как быть если я запускаю игру через командную строку, вот так:
Код:
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
|
||||
|
||||
![]() Код:
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
|
||||
|
||||
![]() спасибо, я попробую
|
#6
|
||||
|
||||
![]() скажите пожалуйста, я вот пытаюсь как то обработать результат выполнения моего кода... скажите я правильно делаю и что можно исправить в этом коде?
Код:
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. |