Newsgroup: it.comp.lang.delphi
Titolo: [D7] Shellexecute o altro ...?

Ciao a tutti,
Spiego brevemente la funzionalita':
devo realizzare un piccolo applicativo con interfaccia window che chiama un
eseguibile esterno, pero' allo stesso tempo dovrei sapere se l'applicativo
chiamato esternamente va' a buon fine oppure ha qualche problema. E' da
tenersi in considerazione che l'applicativo esterno e' comunque realizzato
da me' stesso pertanto posso modificare anche quello se e' da farsi.
La mia idea era quella di chiamarlo da Shellexecute ... pero' se non ricordo
male è possibile chiamarlo con un'altra funzione che mi permetta di sapere
se tutto e' andato bene o comunque che non lasci il processo orfano ?
Grazie
Filippo
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Filippo
Quello che cerchi è CreateProcess in concomitanza con ShellExecute. Di 
seguito un esempietto di chiamata:
Type
   TPriority = (tpBassa, tpNormale, tpAlta, tpRealTime);
// ----------------------------------------------------------------------
// Esegue un programma esterno (anche non .EXE [Esempio .HLP, .BMP, ...])
//
// Programma : Eseguibile
// Params    : Parametri aggiuntivi
// Priorita  : Priorita' di esecuzione
// bWait     : Se deve attendere la fine del programma
//             (bWait non funziona sotto Windows NT/2000)
// ----------------------------------------------------------------------
Function WExec32(Const Programma : String;
                  Const Params    : String;
                        Priorita  : TPriority;
                        bWait     : Boolean) : Boolean;
Var
   lpCmdLine   : Array[0..500] Of Char;
   Priority    : DWord;
   StartupInfo : TStartupInfo;
   ProcessInfo : TProcessInformation;
Begin
   Result := False;
   // ----------------------------------
   // Linea di comando
   // ----------------------------------
   StrPCopy(lpCmdLine, Programma + ' ' + Params);
   // ----------------------------------
   // Settaggio priorita' di esecuzione
   // ----------------------------------
   Case Priorita of
        tpBassa    : Priority := IDLE_PRIORITY_CLASS;
        tpNormale  : Priority := NORMAL_PRIORITY_CLASS;
        tpAlta     : Priority := HIGH_PRIORITY_CLASS;
        tpRealTime : Priority := REALTIME_PRIORITY_CLASS;
        Else
          Priority := NORMAL_PRIORITY_CLASS;
   End;
   // ----------------------------------
   // Azzeramento dati di ritorno
   // ----------------------------------
   FillChar(ProcessInfo, SizeOf(ProcessInfo), 0);
   // -----------------------------------
   // Preparazione dati di Start-Up
   // -----------------------------------
   FillChar(StartupInfo, SizeOf(StartupInfo), #0);
   With StartupInfo Do
        Begin
          cb          := SizeOf(StartupInfo);   // Dimenzione
          dwFlags     := STARTF_USESHOWWINDOW;  // Ignora parametri avanzati
          wShowWindow := SW_SHOWNORMAL;         // Visualizzazione normale
        End;
   // -----------------------------------------------------------
   // Se e' un'applicazione console -> crea una nuova console
   // -----------------------------------------------------------
   Priority := Priority Or CREATE_NEW_CONSOLE;
   // ------------------------------
   // Lancia l'applicazione
   // ------------------------------
   Try
     If Not CreateProcess(nil,         // Nessun modulo
                          lpCmdLine,   // Linea di comando + ' ' + parametri
                          nil,         // No Security Attributes
                          nil,         // No Thread Security Attributes
                          FALSE,       // Nuovo Handle
                          Priority,    // Parametri di Start-Up
                          nil,         // Usa le Enviroment del chiamante
                          nil,         // Nessuna directory di default
                          StartupInfo, // punta alla struttura StartupInfo
                          ProcessInfo) // punta alla struttura ProcessInfo
     Then
       Begin
         Result := (ShellExecute(Application.handle, 'open', lpCmdLine, 
Nil, Nil, SW_SHOW) > 32);
         Exit;
       End;
   Except
     Exit;
   End;
   // ------------------------------------------------
   // Se con attesa -> attende la fine del processo
   // (ATT: Non funziona sotto Windows NT/2000)
   // ------------------------------------------------
   If bWait Then WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
   Result := True;
End;

Grazie mille era proprio quello che cercavo !

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

oggi senza preavviso Delphi 2006 ha iniziato a dare messaggi a raffica 
del tipo:
...
Module Load: UNKNOWN_MODULE_3. No Debug Info. Base Address: $00B90000. 
Process Project1.exe (1480)
Module Unload: UNKNOWN_MODULE_3. Process Project1.exe (1480)
Module Load: UNKNOWN_MODULE_4. No Debug Info. Base Address: $00B90000. 
Process Project1.exe (1480)
Module Unload: UNKNOWN_MODULE_4. Process Project1.exe (1480)
Module Load: UNKNOWN_MODULE_5. No Debug Info. Base Address: $00B90000. 
Process Project1.exe (1480)
Module Unload: UNKNOWN_MODULE_5. Process Project1.exe (1480)
Module Load: UNKNOWN_MODULE_6. No Debug Info. Base Address: $00B90000. 
Process Project1.exe (1480)
Module Unload: UNKNOWN_MODULE_6. Process Project1.exe (1480)
...
il tutto semplicemente creando un progetto nuovo (VCL form application)
ed eseguendolo;
lo stesso giorno su due pc diversi!!!!
gia' provato a reinstallare senza risultati.
non ho parole :-(

 non ho parole :-(
Sono regolarmente licenziati?
Hai gli update automatici attivi?
-- 
Morde


- no
- no
pero' perche' proprio ora dopo due anni senza problemi?

 pero' perche' proprio ora dopo due anni senza problemi?
Visti i presupposti, io direi... giustizia divina. :-)
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

 aggiornamenti;
TurboDelphi?
M.Rossello

 neppure se verra' supportato?
Questo punto e' un po' "pericoloso" da discutere, in quanto le trollate
partono spesso da questo presupposto: "delphi e' in declino? ecc..." 
La verità e' che con l'affermarsi di .net, i linguaggi si sono parificati,
vale a dire che tu, passando a delphi .net, sei in grado di produrre codice
compatibile al 100% con lo standard "de facto" imposto da microsoft. Lo
stesso identico codice che produrrebbe un programmatore con C#, VB.net,
ecc...
Riguardo l'ambito win32, non credo di trovare oppositori nel sostenere che
delphi sia uno tra i migliori (se non IL migliore) RAD per costruire
applicativi.
Ciao
-- 
Morde

 Ciao
trovo Deplphi eccezionale come linguaggio di progrmammazione, se cosi' 
non fosse non avrei abbandonato Visual Basic, cosa di cui non sono 
affatto pentito, ad esempio pero' una volta compravo un paio di riviste 
di programmazione, 'Io programmo' e 'Dev', che ormai da alcuni anni non 
parlano piu' di Delphi. Ho l'impressione che l'orrida voracita' della 
Microsoft l'abbia relegato ad una posizione di nicchia e che un giorno
sparira' e dovro' tornare al ***sigh*** VB.
Tra l'altro volevo anche chiedere se ha un senso sviluppare in win32 o
si puo' tranquillamente passare a .net e che differenze ci siano per 
programmi di puro calcolo come i miei.
grazie
Luca

 programmi di puro calcolo come i miei.
Dipende... se programmi solo per il mondo M$ si ma se spazi tra M$, 
Linux, ed altri SO no. Per quanto riguarda passare a .Net per programmi 
di puro calcolo posso dirti che in questo caso ho avuto esperienze 
negative nel tentativo di passare a .Net, nel senso che i programmi 
volevano più risorse ed erano molto più lenti (ma magari sbagliavo io)

 neppure se verra' supportato?
Mi sembra che il fatto che tu venda e faccia dei soldi sia una garanzia 
sufficiente. Non capisco, solo perché hai delle infondate paure nel 
futuro sei giustificato ad avere dubbi sulla validità dell'acquisto di 
un software con cui stai attualmente realizzando un guadagno?
Premetto che il mio messaggio precedente era solo una battuta, ma 
senz'altro non condivido affatto il tuo modo di pensare e il ritenere 
"giustificativo", nemmeno parzialmente, quello che hai scritto...anzi... :-)
Ciao,
   Marco.


 programmi di puro calcolo come i miei.
E' una domanda che, così come è formulata, è priva di senso: lo sviluppo 
su piattaforma Win32 o .NET non è una scelta che si fa in base a quello 
che dice un altro.
Voglio dire, se ciò che sviluppi gira correttamente e senza problemi, 
perché dovresti fare una migrazione? Basta comunque documentarsi in 
merito... capire poi se serve o meno migrare viene automatico.
Nel tuo caso, se sono "programmi di calcolo", non vedo cosa cambierebbe.
Ciao,
   Marco.


 Dipende... se programmi solo per il mondo M$ si
Se programmi solo per il "mondo M$", puoi comunque rimanere su Win32.
Non è mica obbligatorio sviluppare per .NET solo perché si scrive 
software per Windows. :-)
Ciao,
   Marco.


 software per Windows. :-)
Hai pienamente ragione. Personalmente sono fedele a Win32 ;)

 Hai pienamente ragione. Personalmente sono fedele a Win32 ;)
Non è un problema di fedeltà, per quanto mi riguarda. :-)
.NET non è un obbligo, né è una "bestia" da evitare: è solo 
un'opportunità, da usare se le caratteristiche specifiche della 
piattaforma possono portare qualche beneficio per un progetto ben specifico.
Non ha senso, secondo me, fare una valutazione di questo tipo ragionando 
in termini assoluti: occorre far riferimento ai requisiti del prodotto 
da realizzare.


 
Meno male che con Delphi non è obbligatorio, e l'ambiente è migliorato
anche lato Win32 :-)
Nel mio caso sarebbe una vera seccatura (= spesa elevata) verificare dai
miei clienti un corretto livello di framework !!!
Sinceramente una cosa che ho sempre odiato della BDE era che costringeva ad
avere i clienti con un livello di BDE uguale (o superiore) a quello del tuo
ambiente di sviluppo.
Questo nel passato è stato per me fonte di numerose "seccature" (stessa
traduzione di prima), adesso con .Net ci risiamo, stesso problema !
Per questo io per ora vivo felice con Win32.
Ciao
PS:
Aggiungo una considerazione personale, non in risposta a Marco.
Che Delphi sia in declino ho forti dubbi, io nella mia carriera ho avuto
modo di vedere da vicino il mondo IBM, di proclami di nuove tecnologie sono
sempre stati maestri, dopo un po' si impara a non ascoltarli...
Qualche hanno fa' sembrava che da un momento all'altro il mondo Win32
dovesse sparire dalla faccia della terra (vedi riviste e
commerciali/tecnici Microsoft), la situazione e' molto ma molto diversa.
Se qualcuno si è ammazzato di lavoro per migrare su .Net, solo e soltanto
per avere .Net forse adesso se ne pente.

 Che Delphi sia in declino ho forti dubbi
Purtroppo Delphi e' morto:
http://www.linotadros.com/2008/01/12/DelphiIsGone.aspx
P.S.: Questa e' la parte seria del post:
Le qualita' tecniche di Delphi non credo che nessuno possa metterle in
discussione, e quindi non le discuterò affatto. E' da un decennio che e' sul
mercato, piu' di 1,5 milioni di sviluppatori nel Mondo lo utilizzano,
e' il secondo IDE Windows più usato (il quarto in assoluto) ed ha una
quota di mercato del 15% (sono dati "quasi ufficiali" abbastanza
recenti) eppure ... questo grafico 
http://snipurl.com/1yosn
 mi
lascia interdetto. E questa tabella 
http://www.tiobe.com/tpci.htm
altrettanto.
Perchè l'azienda che produce un prodotto valido ed apprezzato
perde costantemente valore?
Perchè gli utilizzatori di un prodotto così buono non sono richiesti
dall'aziende?
Come direbbe il saggio: "la risposta è dentro di te, ma e' sbagliata".
IMHO, un prodotto - un ambiente di sviluppo in particolare - non ha futuro
se non ha alle spalle almeno una di queste condizioni:
* una società con una solidità economica elevata: Microsoft si può
permettere di "svendere" i suoi ambienti di sviluppo, offrendo un supporto
enorme a prezzi irrisori (se non gratuitamente), mettendo a disposizione
versioni sempre aggiornate alle ultimissime tecnologie disponibili.
* una comunità di appassionati fruitori che investe il proprio tempo nello
sviluppo del prodotto, senza preoccuparsi di doverci "guadagnare" qualcosa
che altro non sia che la propria soddisfazione personale (PHP per esempio).
* l'indipendenza dalla piattaforma, la portabilità del codice, la
versatilità delle applicazioni (Java e C).
Delphi, purtroppo, non ha nessuna di queste caratteristiche:
* Borland e Codegear sono tutt'altro che "solide" e la loro capacità di
investire sul prodotto Delphi è davvero limitata.
* Delphi è quello che CodeGear ci vende: o così o ti attacchi. Se vuoi
qualcosa di più dall'IDE, per esempio, devi chiederlo a Codegear, e
aspettare che lo implementi. Se c'e' un bug, non puoi correggerlo: segnalalo
e aspetta che nella prossima patch ci sia la correzione.
E via discorrendo...
* Delphi e' perfetto per Win32 (fino a XP), per Vista e' piu' che
accettabile, per .Net difetta parecchio e poi ... e poi basta: Linux? Mac?
WinCE? Palmari? Scordateveli.
Cosa pensare, allora? Io con il cuore che gronda sangue (bè, quasi, ...)
sono quasi tentato di dire che Delphi è in declino: per favore, qualcuno
mi contraddica, perchè mi da davvero fastidio pensare una cosa del
genere.
Ciao
-- 
ACSH
[TurboDelphi]
I computer sono stupidi. Non sanno fare domande!
Pablo Picasso

 
Non è detta l'ultima parola, link per link eccone un'altro, il malato
respira ancora:
http://www.tiobe.com/index.htm?home
Ciao

 respira ancora:
Ehm... ma l'hai letto il post citato da ACSH??
ROTFL
-- 
Morde

 ROTFL
Si l'ho letto, il commento piů bello č quello di Marco van de Voort !
Sono sembrato troppo serio nella risposta?
Non volevo!
Ciao