Utilizzare ShellExecute
La funzione API ShellExecute può lanciare un’applicazione o aprire un file in ambiente WIN32. E’ utile in molte situazioni in quanto evita di scrivere molte righe di codice per raggiungere lo stesso scopo come ad esempio inviare una e-mail (es. Inviare E-Mail con ShellExecute).
HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, nShowCmd);
Parametri:
- hwnd: handle della finistra, questo valore può essere NULL se la chiamata non è associata a nessuna finestra
- lpOperation: è una Pchar che contiene l’azione da eseguire, le azioni più comuni sono
- edit: lancia l’editor e apre il relativo documento settato in lpFile all’interno dell’editor
- explore: esplora una cartella specificata in lpFile
- find: cerca nella directory specificata in lpDirectory
- open: apre la voce specificata in lpFile
- print: stampa un file specificato in lpFile, se quest’ultimo non è un file la funzione dà errore
- lpFile: Pchar contenente il nome del file o dell’oggetto che deve essere eseguito a seconda di lpOperation
- lpParameters: Pchar contenente i parametri che devono essere passati all’applicazione. Se lpFile è un documento deve essere impostata a NULL
- lpDirectory: Pchar che deve contenere la directory di lavoro, se è NULL prende il valore dell’attuale directory di lavoro
- nShowCmd: flag che specifica come deve essere visualizzata l’applicazione quando si apre, può assumere i seguenti valori: SW_HIDE,SW_MAXIMIZE,SW_MINIMIZE,SW_RESTORE, SW_SHOW, SW_SHOWDEFAULT, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_SHOWNA, SW_SHOWNOACTIVATE, SW_SHOWNORMAL
Valore restituito (intero):
- 0 (zero): errore di memora o di risorsa del S.O.
- ERROR_FILE_NOT_FOUND: il file specificato non esite
- ERROR_PATH_NOT_FOUND: il percorso specificato non esiste
- ERROR_BAD_FORMAT: il file eseguibile non è valido
- SE_ERR_ACCESSDENIED: il sistema operativo nega l’accesso al file
- SE_ERR_ASSOCINCOMPLETE: il file associato è incompleto o non è valido
- SE_ERR_DDEBUSY: la transazione DDE non può essere completata perché altre transazioni DDE sono in fase di elaborazione
- SE_ERR_DDEFAIL: transazione DDE fallita
- SE_ERR_DDETIMEOUT: transazione DDE non completata perchè la richiesta è andata fuori tempo limite
- SE_ERR_DLLNOTFOUND: la DLL specificata non è stata trovata
- SE_ERR_FNF: il file specificato non è stato trovato
- SE_ERR_NOASSOC: nessuna applicazione è associata al file specificato
- SE_ERR_OOM: memoria insufficiente per completare l’operazione
- SE_ERR_PNF: la directory specificata non è stata trovata
- SE_ERR_SHARE: violazione della condivisione
Ora vediamo alcuni esempi pratici dell’utilizzo della funzione ShellExecute
Lanciare un’applicazione
ShellExecute(Handle, ‘open’, PChar(’c:\delphi\delphi.exe’), nil, nil, SW_SHOW);
Aprire un file nel Blocco note
ShellExecute(Handle, ‘open’, PChar(’notepad’), PChar(’c:\test\readme.txt’), nil, SW_SHOW);
Stampare un documento
ShellExecute(Handle, ‘print’, PChar(’c:\test\test.doc’), nil, nil, SW_SHOW);
Aprire una pagina web
ShellExecute(Handle, ‘open’, PChar(’http://www.delphi-blog.it/’), nil, nil, SW_SHOW);
Esplorare una directory
ShellExecute(Handle, ‘explore’, PChar(’c:\windows)’, nil, nil, SW_SHOW);
Avviare un comando dal prompt di DOS:
ShellExecute(Handle, ‘open’, PChar(’command.com’), PChar(’/c copy file1 file2′), nil, SW_SHOW);
Aprire il client di posta predefinito per inviare una mail
ShellExecute(0, ‘open’,’mailto:info@delphi-blog.it’, nil, nil, SW_SHOWNORMAL);