Newsgroup: it.comp.lang.delphi
Titolo: lanciare un programma dos

salve a tutta la ml.
vorrei costruire un'interfaccia grafica per il programma freeware upx
(compattatore di eseguibili).
Il programma infatti è un'applicazione a console. Come faccio a passarli
gli opportuni parametri e a lanciarlo??
Un'altra domanda: come faccio a lanciare (da un programma delphi) IExplorer
con un particolare files html?
ciao e grazie a chiunque vorrà rispondermi.
-- 
Posted from 
tango.SoftHome.net
 [204.144.231.49] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

con un particolare files html?
Se hai un browser di default nel sistema, ShellExecute con l'URL (o il
pathname del file) come parametro.
Saluti
Paolo Arosio

 scaduto, prova su deja.
Eccolo: Messaggio di Lorenzo Lutti:
---
Per reindirizzare stdin/out/err devi usare CreateProcess(), che ti
permette di specificare tali handles. Quindi ti basta creare tre pipes
con CreatePipe(), creare il processo in modo che possa ereditare gli
handles del genitore e usare quelle.
Questo codice lancia nascosta un'applicazione in console (funziona sia
con i programmi DOS che con quelli Win32) passandole nello stdin un
buffer e leggendo il risultato su stdout/err. E` fatto per le MFC, ma e`
facilmente riadattabile (basta usare stringhe normali al posto di
CString):
(pero` un'altra volta guarda anche su Deja, e` la terza volta che lo
posto!)
BOOL CWndDummy::Filtro_EseguiEsterno( CString& str, CString& prg)
{
 CString dopo;
 STARTUPINFO si;
 PROCESS_INFORMATION pi;
 // Crea una pipe per stdin e una per stdout
 SECURITY_ATTRIBUTES sa;
 HANDLE in[2], out[2];
 ::FillMemory( &sa, sizeof(sa), 0);
 sa.nLength = sizeof(sa);
 sa.bInheritHandle = TRUE;
 if( !::CreatePipe( &out[0], &out[1], &sa, 0))
  return FALSE;
 if( !::CreatePipe( &in[0], &in[1], &sa, 0))
 {
  ::CloseHandle( out[0]);
  ::CloseHandle( out[1]);
  return FALSE;
 }
 // Lancia il filtro esterno, con gli handles modificati
 FillMemory( &si, sizeof(si), 0);
 si.cb = sizeof(si);
 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
 si.wShowWindow = SW_HIDE;
 si.hStdOutput = si.hStdError = out[1];
 si.hStdInput = in[0];
 if( !::CreateProcess( NULL, (char *)LPCTSTR(prg), NULL, NULL,
  TRUE, 0, NULL, NULL, &si, &pi))
 {
  ::CloseHandle( out[0]);
  ::CloseHandle( out[1]);
  ::CloseHandle( in[0]);
  ::CloseHandle( in[1]);
  return FALSE;
 }
 // Chiude i lati che non servono piu`
 ::CloseHandle( out[1]);
 ::CloseHandle( in[0]);
 // Spedisce nell'stdin dell'altro processo il messaggio (con
 // EOF alla fine)...
 str += "\032\r\n";
 int a=0, n=str.GetLength();
 DWORD nIO;
 while( a<n)
 {
  if( !::WriteFile( in[1], LPCTSTR(str.Mid(a)), n-a, &nIO, NULL) ||
    nIO == 0)
   break;
  a += nIO;
 }
 ::CloseHandle( in[1]);
 // ...e legge il risultato dal suo stdout
 char buf[64];
 while( ::ReadFile( out[0], buf, 64, &nIO, NULL) && nIO>0)
  dopo += CString( buf, nIO);
 ::CloseHandle( out[0]);
 str = dopo;
 return TRUE;
}
---
Ciao! :)
--
- Carlo -
c.b...@libero.it

> afaik, [...]
cosa vuol dire?
grazie e scusa per la doamnda idiota :)
Alan Solo


per quel che ne so (as far as i know)
Saluti
Paolo Arosio

 mah, per quel che ne so : "as far i know" ;))
come, non fa ridere? vabbo'...
Ciao, :)
Alan Solo
ah, che pirla, dimenticavo: grazie. ;)