Jak wywolac program...

0

Witam, mama taki problem: jak wywolac z poziomu delphi program XXX.EXE który pod DOSem wywoluje sie nastepujaco:

cd XXX.EXE costam.asm

powiem ze jest to kompilator asemblera`51 i zeby cos skompilowac to nalezy wywolac ten program z parametrem (parametr to nazwa pliku zrodlowego do kompilacji).

HEX

0

Albo WinExec('tu piszesz jak w dosie',0) - nie zalecane, istnieje dla zgodności ze starszymi wersjami, albo

ShellExecute(...). Teraz nie pamietam parametrów, ale jednym z nich jest nazwa programu, oraz parametry wywołania programu - powinienes podać nazwę pliku .asm

A poza konkursem - <font color="red">prubowałes</span> pascala dla AVR ('51 tez programuje). Niemcy napisali całkiem fajne IDE i kompilator. Trochę go 'zbasic'ili', ale i tak jest wygodniejszy od asm'a. No ale co kto woli.

0

Aj, nie zwrociłem uwagi - nie pisz w poleceniach CD. Dla dosa jest to zmiana katalogu. Wsztystko wyłożyłoby się.

0

poda ktos przyklad konkretny???????????????????????????

0

poda ktos przyklad konkretny???????????????????????????

Jeżeli chodzi Ci o procedurę WinExec(); to Tjanusz Ci już napisałprzykład stosowania tzn.
[code]WinExec('komendy',0);[/code]
Jeżeli chodzi o procedurę ShellExecute(); to tu masz przykłąd zastosowania tej procedury:
[code]
ShellExecute(handle,'open','D:\Ścieżka\do\programu\program.exe',parametry,nil,sw_show);
[/code]

Pierwszy parametr określa "uchwyt" programu.

Drugi parametr określa jaki program ma zostać uruchomiony (ścieżka do porgramu orzaz nazwa programu)

Trzeci parametr określa nazwę programu do uruchomienia.

Czwarty parametr określa jakie parametry mają być przesłane do programu.

Piąty parametr określa, w którym katalogu dana aplikacja ma się otworzyć.

Ostatni parametr (czyli szósty) może przyjąć 6 postaci:

0 sw_hide aplikacja będzie otwarta, ale niewidoczna
1 sw_normal aplikacja otworzy się normalnie
2 sw_minimize aplikacja otworzy się zminimalizowana
3 sw_maximize aplikacja otworzy się zmaksymalizowana
4 - okno aplikacji otworzy się jako nieaktywne
5 sw_shownormal otwiera się okno aplikacji o domyślnych rozmiarach

Po więcej infromacji zobacz artykuł na http://www.4programmers.net, który się pojawił po wpisaniu "ShellExecute" w wyszukiwarce na głównej stronie tego serwisu na pierwszym miejscu: http://4programmers.net/view.html?id=153.
Tabelka na końcu tej odpowiedzi i informacje pochodzą właśnie z tego artykułu, specjalnie nie pisałem więcej informacji w tym poscie (odpowiedzi), żeby pokazać, że samemu też się da odnaleźć potrzebne informacje kożystając z pomocy (np. tej standardowo dołączanej do delphi), z wyszukiwarki itd.
Tylko opisy poszczególnych parametrów sam napisałem (również opierając się na tym artykułe (z tych samych wyżej wymienionych powodów, z których właśnie również piszę tą stopkę tej odpowiedzi (postu))).
:)

0

WinExec jest funkcją przestarzałą (obsolete) i Microsoft nie zaleca jej używania (być może w kolejnych wersjach Windows zostanie całkowicie usunięta).

Najwygodniejsze jest chyba zastosowanie ShellExecute (opis w poście powyżej), ale możesz też użyć CreateProcess. Nazwę aplikacji i wszystkie parametry (np.: XXX.exe costam.asm) najlepiej przekazać w drugim argumencie. Wówczas pierwszym argumentem powinno być NIL.
Stosowanie CreateProcess jest nieco męczące, za to oferuje największe możliwości.

Inną funkcją API pozwalającą uruchamiać programy z parametrami jest ShellExecuteEx.

Przykłady:

Procedura uruchamiająca program Exe z parmetrami Params wykorzytująca CreateProcess:

procedure RunProcess(const Exe, Params: string);
var
  si: TStartupInfo;
  pi: TProcessInformation;
  dir: string;
begin
  dir := ExtractFileDir(Exe);
  
  if Params <> '' then Exe := Exe + ' ' + Params;

  FillCHar(si, SizeOf(si), 0);
  FillCHar(pi, SizeOf(pi), 0);
  si.cb := SizeOf(si);

  if not CreateProcess(
    nil, //lpApplicationName
    PChar(Exe), //lpCommandLine
    nil, //lpProcessAttributes
    nil, //lpThreadAttributes
    true, //bInheritHandles
    0, //dwCreationFlags
    nil, //lpEnvironment
    PChar(dir), //lpCurrentDirectory
    si, //lpStartupInfo
    pi //lpProcessInformation
    ) then
  begin
    MessageBox(Handle, 'CreateProcess Failed !', 'Error', MB_OK or MB_ICONEXCLAMATION);
    Exit;
  end;


end;

Procedura uruchamiająca program Exe z parmetrami Params wykorzytująca ShellExecuteEx:

procedure RunProcess2(const Exe, Params: string);
var
  dir: string;
  sei: TShellExecuteInfo;
begin
  dir := ExtractFileDir(Exe);

  FillChar(sei, SizeOf(sei), 0);

  with sei do
  begin
    cbSize := SizeOf(sei);
    lpFile := PChar(Exe);
    lpParameters := PChar(Params);
    nShow := SW_SHOW;
    fMask := SEE_MASK_NOCLOSEPROCESS;
  end;

  if not ShellExecuteEx(@sei) then
  begin
    MessageBox(Handle, 'ShellExecuteEx Failed !', 'Error', MB_OK or MB_ICONEXCLAMATION);
    Exit;
  end;


end;
0

ShellExecute(handle,'open','D:\Ścieżka\do\programu\program.exe',parametry,nil,sw_show);
[/code]

A jak zrobic żeby zapasi tego "D:\scizka....." ściezke pobieralo ze zmiennej "EXE" a zminna "EXE" pobierala sciezke z komponentu edit1?
Ja zrobilem tak i za bardzo nie dziala:
[code]
procedure TForm1.Button1Click(Sender: TObject);
var
exe : string;
begin
exe := edit1.Text;
ShellExecute(handle,'open',exe,nil,nil,sw_show);
end;
[/code]
Delphi nawet nie chce skompilować.

0
ShellExecute(handle,'open',PChar(exe),nil,nil,sw_show);
0

Ja akurat też probiłem taki program napisać, no prawie skończyłem i też nad tym myślałem.
I ja to zrobiłem tak (i działa):

var
asm1: string;
Begin
asm1:='costam.asm';
ShellExecute(Handle,'open','xxx.exe', Pchar(asm1), nil,SW_SHOWNORMAL);
End;

w zmiennej asm1 umieść to co ma być parametrem uruchamiania pliku xxx.exe

1 użytkowników online, w tym zalogowanych: 0, gości: 1