Newsgroup: it.comp.lang.delphi
Titolo: Domanda un po' più difficile...

Ciao a tuttti!
Ieri ho causato un "semi-flame" per una domanda che in effetti potevo
evitare di fare,bastava solo che mi sforzassi di cercare un po' in giro, tra
manuali e motori di ricerca...
Ma ora, dopo essere andato a letto alle 4 sfiduciato, devo ricorrere di
nuovoall'aiuto di
questo NG:-((
Riassumendo, ho scritto un programmino di poche righe che ha l'unico scopo
di fare da menu, e di chiamare programmi EXE esterni..
Ieri sera, già che c'ero , ho voluto riadattarlo alle mie esigenze: possiedo
alcuni corsi multimediali di windows, tutti sui 200 mega, ognuno su un
CD..allora ieri sera ho avuto un idea geniale!! :-)): ne faccio un unico CD,
ogni programma originale lo metto in una cartella, e all'avvio del mio nuovo
CD (Autorun) mi appare un menu: devo scegliere tra Corso Word, Corso
Excel,Corso Windows ME..clicco sul pulsante corripondente e mi parte il
corso desiderato..come vedete un programmino semplicissimo, ma che mi è
molto comodo.
Ma qui nasce il problema: a causa della chiamata esterna (ho usato
SHELLEXECUTE, ma ho provato anche CREATEPROCESS), il programma parte
regolarmente, MA....i filmati in esso contenuti, così come le pagine
HTML..non partono assolutamente!!!
Cioè il programma originario, al suo interno, faceva partire il lettore
multimediale per i filmati,oppure Internet Explorer per le schermate di solo
testo..ed evidentemente non riesce più a fare queste chiamate esterne, a
causa del modo in cui io ho fatto partire il programma (mediante
SHELLEXECUTE apppunto..)
Qualcuno ha capito qual è il problema? Come posso rimediare? E' un parametro
di Shellexecute che deve essere settato in una qualche maniera, oppue non è
possibile far lanciare programmi esterni da un programma che è GIA' stato
lanciato da un programma esterno?
Grazie per l'eventuale aiuto, questo programma mi sta ossessionando..piccolo
ma bastardo!!
Ciao,
Gianluca

 SHELLEXECUTE, ma ho provato anche CREATEPROCESS), il programma parte
Se ho capito il tuo problema prova a guardare la ShellExecuteInfo (SEI)
dovrebbe funzionare cosi'
procedure getinfo(Nomedelfile:String);
Var info: TShellExecuteInfo;
begin
  FillChar(info, SizeOf(info), #0);
  With info do
  begin
    Size := Sezeof(info);
    lpFile := PChar(Nomedelfile);
    fMask := SEE_MASK_NOCLOSEPROCESS;  // per fare in modo che hprocess
riceva l'handle del processo
    nShow := SW_SHOW;  // SW_NORMAL, .....o quello che vuoi
  end;
  if shellexecuteEx(@info) then  // ok se tutto viene eseguito aspetto la
chiusura dell'applicazione
  begin
    WaitForSingleObject(info.hProcess, INFINITE)
    CloseHandle(info.hProcess);
  end;
end;
Ovviamente prendi il tutto come esempio da cui partire..
P.S. Per il pezzo che ti ho postato ho preso spunto dalla JCL che trovi
all'indirizzo 
http://delphi-jedi.org/
aggiungendo l'eveto waitforsingleObject

 faccio un unico CD, ogni programma originale lo metto in una cartella
io non credo che la ShellExecute possa dare problemi di questo tipo,
forse e' perche' li hai messi in una cartella diversa e i programmi
originari cercano i filmati, testi ecc... sulla root del CD...
se li lanci normalmente (dalle cartelle) funzionano?
in caso negativo potrei proporti una soluzione *schifosa*:
usare il  comando SUBST del dos...
oppure, se possibile mettere i programmi tutti sulla root (se non hanno i
nomi dei file uguali..)
fammi aspere... ;)
Ciao,
Alan Solo