[ gygy @ 27.11.2003. 23:03 ] @
Kako da na primer kad kliknem na Button1 da pokrene odgovarajuci exe fajl, na primer moj program se nalazi u jednom direktorijumu nije bitno gde i sad zelim da on pokgere aplikaciju koja je u poddirektorijumu npr "exe\proba.exe".
Probao sam sa ovom funkcijom ali nista se ne desava
Code:

procedure TForm1.Button1Click(Sender: TObject);
var
proc_info: TProcessInformation; 
startni_info: TStartupInfo; 
begin 
// inicijalizacija 
FillChar(proc_info, sizeof(TProcessInformation), 0);
FillChar(startni_info, sizeof(TStartupInfo), 0); startni_info.cb := sizeof(TStartupInfo);
// pokusaj kreiranja procesa
if CreateProcess('exe\proba.exe', nil, nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, startni_info, proc_info) <> False then
begin 
// proces je uspesno kreiran i
//ceka se njegovo okoncanje... 
WaitForSingleObject(proc_info.hProcess, INFINITE);
// Proces je zavrsen. Možemo ga zatvoriti
CloseHandle(proc_info.hProcess); Application.MessageBox('zavrsio rad!', 'Info', MB_ICONINFORMATION);
end 
else begin 
// nemogućnost kreiranja procesa
Application.MessageBox('Nije moguce izvrsiti ' + 'application', 'Error', MB_ICONEXCLAMATION);
end;
end; 
i nista se ne desava?
da li postoji i neki drugi kod, posto ovaj nije ispravan tj nece da otvori aplikaciju?
Hvala unapred!!!
GYGY
[ morlic @ 27.11.2003. 23:15 ] @
Jesi li probao da stavis punu putanju do exe-a a ne "exe\proba.exe" ?

Takodje, kod koji koristis ceka da ti se proces koji si pokrenuo zavrsi, da li si siguran da to hoces?


Takodje imas i

WinExec("C:\Program Files\prg.exe", ...)
[ erekoz @ 27.11.2003. 23:18 ] @
Evo ovaj kod sljaka, saljem integralnu verziju, pre imena fajla samo ubaci putanju do
njega npr. : c:\nekifolder\nekapalikacija.exe


unit fMain;
{===============================================================================
Description: This example demonstrates how to use ShellExecute to execute an
external application.
System: Examples.
Notes: - ShellAPI must be included in the uses clause.
Copyright: Copyright © 2000, CazTec Computer Systems cc.
This code can be modified and redistributed in any way that you
see fit.
--------------------------------------------------------------------------------
Revisions
--------------------------------------------------------------------------------
{ #@20000709-CC Created by Carl Clark ([email protected])
===============================================================================}

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ShellAPI, StdCtrls, ExtCtrls;

type
TfrmMain = class(TForm)
btnExecuteNotepad: TButton;
imgeExample: TImage;
lblExampleDsc: TLabel;
procedure btnExecuteNotepadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmMain: TfrmMain;

implementation

{$R *.DFM}

procedure TfrmMain.btnExecuteNotepadClick(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'notepad.exe', '', '', SW_NORMAL);

{ #@20000709-CC Other examples.

This example would attempt to open the bootlog.txt file into Notepad.
ShellExecute(Handle, 'open', 'notepad.exe', 'c:\bootlog.txt', '', SW_NORMAL);

This example would print the bootlog.txt file.
ShellExecute(Handle, 'print', 'notepad.exe c:\bootlog.txt', '', '', SW_NORMAL);
}
end;

end.
[ gygy @ 28.11.2003. 01:21 ] @
Narode sljaka i moj kod kad mu ubacim c:\proba\:
....
if CreateProcess('c:\proba\exe\proba.exe', nil, nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, startni_info, proc_info) <> False then
begin
....
imam ja i nesto na ovaj fazon:
ShellExecute(Handle,nil,''c:\proba\exe\proba.exe'',nil,nil,SW_SHOWNORMAL);
i to sljaka.
...
ali ja zelim da radi bez toga c:\proba\, posto mi je moj program npr u jednom folderu i u tom podfolderu imam folder EXE gde su smesteni jos neki programi i sad zelim da kad taj folder iskopiram bilo gde na disk da on radi!
Da li sam sad bio jasniji?
Pozdrav!!!
GYGY
[ overflow @ 28.11.2003. 08:31 ] @
Sa bilo kojim gore navedenim nacinom pozivanja pozovi:

ExtractFilePath(Application.EXEName)+'exe/proba.exe'

P.S. Mislim da ce ti trebati jedan polu-casting PChar(ExtractFilePath(Application.EXEName)+'exe/proba.exe') pre svega ovoga.
[ Milos D @ 28.11.2003. 09:01 ] @
Ako je EXE folder uvek u folderu tvoje aplikacije, onda uvek možeš da znaš punu putanju do njega:

ExtractFilePath(Application.ExeName)+'\EXE'


Ooooops... zakasnio sam sa odgovorom... :)
[ gygy @ 29.11.2003. 00:03 ] @
Momci mnogo vam hvala!!!
evo ga gotov kod:
Code:

     ShellExecute(Handle,nil,PChar(ExtractFilePath(Application.EXEName)+'\EXE\proba.exe'),nil,nil,SW_SHOWNORMAL);

POZDRAV
GYGY