26/02/07 0:16
pierotofy
Usa la funzione ShellExecute definita nella unit Windows.
Il mio blog: piero.dev
26/02/07 8:45
Valentinox
In genere utilizzo la funzione ShellExecute per inviare e-mail o aprire un url in questo modo
Come dovrei cambiarlo per eseguire ad esempio il comando:
ShellExecute(Form1.Handle, 'open', PChar(Url), nil, nil, SW_SHOWNORMAL);
Come dovrei cambiarlo per eseguire ad esempio il comando:
regsvr32 forum.dll delphi.dll pierotofy.dll
aaa
27/02/07 20:13
Valentinox
Sono riuscito ad eseguire il comando regsvr32 nome.dll inserendo una procedura nel programma che mi permette di eseguire comandi dos e salvarne l'output in un oggetto TMemo (che non so cosa sia -.-')
Di funzionare funziona, infatti dopo che l'azione viene eseguita viene fuori un messaggio del tipo: dllRegisterServer in nome.dll riuscito. Ma come premo ok sulla finestra col messaggio mi accorgo che il programma non risponde più...
Sapete come posso evitare questo malfunzionamento finale?
Vi posto il codice della procedura...
COn questo la richiamo:
Questa invece è la procedura vera e propria:
Di funzionare funziona, infatti dopo che l'azione viene eseguita viene fuori un messaggio del tipo: dllRegisterServer in nome.dll riuscito. Ma come premo ok sulla finestra col messaggio mi accorgo che il programma non risponde più...
Sapete come posso evitare questo malfunzionamento finale?
Vi posto il codice della procedura...
COn questo la richiamo:
LanciaComandoDosInMemo('regsvr32 MSXML3.DLL',Memo1);
Questa invece è la procedura vera e propria:
procedure LanciaComandoDosInMemo (ComandoDos: String; AMemo:TMemo); const BufferDiLettura = 2400; var AttrSicurezza : TSecurityAttributes; CodaDiLettura, CodaDiScrittura : THandle; Inizio : TStartUpInfo; InfoDelProcesso : TProcessInformation; Buffer : Pchar; ByteLetti : DWord; AppAttiva : DWord; begin with AttrSicurezza do begin nlength := SizeOf(TSecurityAttributes); binherithandle := true; lpsecuritydescriptor := nil; end; if Createpipe (CodaDiLettura, CodaDiScrittura, @AttrSicurezza, 0) then begin Buffer := AllocMem(65536); // alloca memoria per 64k FillChar(Inizio, Sizeof(Inizio),#0); Inizio.cb := SizeOf(Inizio); Inizio.hStdOutput := CodaDiScrittura; Inizio.hStdInput := CodaDiLettura; Inizio.dwFlags := STARTF_usesTDHANDLES + STARTF_usesHOWWINDOW; Inizio.wShowWindow := SW_HIDE; if CreateProcess(nil, PChar(ComandoDos),@AttrSicurezza,@AttrSicurezza,true, NORMAL_PRIORITY_CLASS, nil,nil,Inizio,InfoDelProcesso) then begin repeat AppAttiva := WaitForSingleObject(InfoDelProcesso.hProcess,100); Application.ProcessMessages; until (AppAttiva <> WAIT_TIMEOUT); Repeat ByteLetti := 0; ReadFile(CodaDiLettura,Buffer[0], BufferDiLettura,ByteLetti,nil); Buffer[ByteLetti]:= #0; OemToAnsi(Buffer,Buffer); AMemo.Text := AMemo.text + String(Buffer); until (ByteLetti < BufferDiLettura); end; FreeMem(Buffer); // libero la memoria CloseHandle(InfoDelProcesso.hProcess); CloseHandle(InfoDelProcesso.hThread); CloseHandle(CodaDiLettura); CloseHandle(CodaDiScrittura); end; end;
aaa