Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Запуска программы с параметрами

Автор: Commandos
Дата сообщения: 02.07.2003 18:32
Нужен пример запуска программы с параметрами на delphi. Например, чтоб открыть CD-ROM мне надо дать команду proba.exe -o , а для закрытия proba.exe -c.
Заранее благодарен
Автор: KostiKL
Дата сообщения: 02.07.2003 19:16
Испльзуй функцию CreateProcess()
Описание найдешь в Help'e!

А вот типа пример:

Код:
public
{ Public declarations }
SInfo: STARTUPINFO;
PInfo: PROCESS_INFORMATION;
...
procedure TMainForm.RunButtonClick(Sender: TObject);
var
CommandLine: AnsiString;
begin
...
AppPath:= ExtractFilePath(Application.ExeName);
CommandLine:= 'proba.exe -o';
CreateProcess(nil,PChar(CommandLine), //собственно твоя командная строка
nil,nil,TRUE,
CREATE_DEFAULT_ERROR_MODE,nil,
AppPath, //Енто каталог по умолчанию, который будет
//использовать запущенное приложение
SInfo,PInfo);
end;
Автор: Arion
Дата сообщения: 03.07.2003 08:20
Еще можно - ShellExec (она описана в модуле shellapi), с ее помощью можно не только запускать exe файлы, но и открывать любые зарегистрированные типы документов.
Автор: KostiKL
Дата сообщения: 03.07.2003 13:41
Arion
Спасбо, шо дополнил, ато я про нее забыль совсем...
Помню еще чего-то было, а чего не помню!
Автор: Commandos
Дата сообщения: 03.07.2003 13:57
Вы не так поняли, мне нужно, чтоб прога работала с параметрами
Автор: KostiKL
Дата сообщения: 03.07.2003 15:31
Дык это тебе функцию

Цитата:

function ParamStr(Index: Integer): string;



Код:
procedure TForm1.FormCreate(Sender: TObject);

var
i: Integer;
begin
for i := 1 to ParamCount do
begin
if LowerCase(ParamStr(i)) = 'beep' then
Beep
else if LowerCase(ParamStr(i)) = 'exit' then
Application.Terminate;
end;
end;
Автор: Commandos
Дата сообщения: 05.07.2003 14:59
KostiKL
Arion

Спасибо за помощь, но у меня получилось вот так на delphi 7:

unit Unit1;

interface

uses
Windows, Messages,MMSystem, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

var s:string;


type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
s:=paramstr(1);

if s='-o' then mciSendString('Set cdaudio door open wait',nil, 0, Form1.Handle);
if s='-c' then mciSendString('Set cdaudio door closed wait', nil, 0, Form1.Handle);


end;

end.
Автор: KostiKL
Дата сообщения: 05.07.2003 23:12
Что значит?...

Цитата:
но у меня получилось вот так на delphi 7


Ты как раз рекомендуемую мною постом выше функцию и использовал!
В чем разница...
или ты просто опечаталси со словом НО?

Автор: Hmmmm
Дата сообщения: 09.06.2004 12:03
KostiKL

Возникла схожая проблема. Нужно накрапать запуск одной проги, при выходе из другой. Хотел использовать твою заготовку


Цитата:

procedure TForm1.Button1Click(Sender: TObject);
var SInfo: STARTUPINFO;
PInfo: PROCESS_INFORMATION;
CommandLine: AnsiString;
AppPath: PChar;//Если ставлю ansistring - ошибка совместимости типов для AppPath
//параметра в теле функции CreateProcess (несовместимость String И PChar); Если Pchar
//то AppPath:=... не проходит по несовместимости типов
begin
//AppPath:= 'C:\totalcmd\';//ExtractFilePath(Application.ExeName);//Никакие комбинации
//не цепляют файло на запуск
CommandLine:= 'totalcmd.exe';
CreateProcess(nil,PChar(CommandLine), CREATE_DEFAULT_ERROR_MODE,nil,
AppPath,
SInfo,PInfo);
ShowMessage(Commandline);
end;


Мучаю Delphi5 на XPSP1. Сам не программер, понять в чем ошибка не могу. Посоветуйте плиз. Спасибо.
Автор: Sleepwalker
Дата сообщения: 09.06.2004 12:10
Hmmmm
вот... юзаю регулярно... разберешься, я думаю:
function ExecAndWait(const FileName,
Params: ShortString;
const WinState: Word;var ExCode:DWORD): boolean;
var
StartInfo: TStartupInfo;
ProcInfo: TProcessInformation;
CmdLine: ShortString;
i:integer;
begin
CmdLine := '"' + Filename + '" ' + Params;
FillChar(StartInfo, SizeOf(StartInfo), #0);
with StartInfo do
begin
cb := SizeOf(StartInfo);
dwFlags := STARTF_USESHOWWINDOW;
wShowWindow := WinState;
end;
Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
nil,StartInfo,ProcInfo);
if Result then
begin
repeat
i:=WaitForSingleObject(ProcInfo.hProcess, 10);
application.ProcessMessages;
until i<>WAIT_TIMEOUT;
{ Free the Handles }
getexitcodeprocess(ProcInfo.hProcess,ExCode);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
end;
Автор: Hmmmm
Дата сообщения: 09.06.2004 12:38
Sleepwalker

Спасибо, попробую

Я тут убойную весчь нашел

Цитата:

uses ShellAPI
ShellExecute(Handle,'Open','c:\totalcmd\totalcmd.exe',nil,nil,SW_SHOWNORMAL)


И усе работает. Прямо для меня примерчик lol
Автор: Sleepwalker
Дата сообщения: 09.06.2004 13:40
Hmmmm
тоже вариант, но это немного другое хотя тоже будет работать
Автор: Audciz
Дата сообщения: 09.06.2004 17:58
А ещё

Код: function WinExec(IpCmdLine: PAnsiChar; UCmdShow: Cardianl): Cardinal
Автор: mihas83
Дата сообщения: 10.06.2004 07:24
Commandos
Кое-что полезное можешь почерпнуть здесь: http://forum.ru-board.com/topic.cgi?forum=33&topic=2388#1
Автор: Sleepwalker
Дата сообщения: 10.06.2004 07:44
Audciz
The WinExec function runs the specified application.
This function is provided for compatibility with earlier versions of Windows. For Win32-based applications, use the CreateProcess function.

Страницы: 1

Предыдущая тема: Какой язык программирования учить?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.