L’uso dell’oggetto “Shell.Application” per compiere delle operazioni del sistema operativo.

Di Ernest Morariu - Torino - Lunedi 2 Aprile 2001

 

 

 

Tante volte siamo messi nella situazione di compiere diverse operazioni che coinvolgono il sistema operativo. In tale situazioni, di solito, facciamo uso di RUN o !, solo che in certi casi questo comando e’ abbastanza limitato. “Shell.Application” e’ un oggetto che si può creare in tutti i sistemi operativi Windows, è molto pratico e facile da usare in maniera “orientata oggetto”.

 

 

*        La creazione dell’oggetto:

 

oShell=CreateObject(“Shell.Application”)

 

A questo punto possiamo disporre di tutti i metodi dell’oggetto oShell.

 

Esempi:

 

*           per aprire Windows Explorer in un certa directory (diciamo C:\Documenti\)

oShell.Explore(“C:\Documenti\”)

oppure

oShell.Open(“c:\Documenti\”)

 

*           per lanciare un eseguibile trasmettendo anche dei parametri :

 

oShell.ShellExecute("notepad.exe","c:\miofile.txt")

 

Nota : Il metodo ShellExecute non funziona su tutti i sistemi operativi. Vedi alla fine di questo documento la funzione equivalente ShellExec.

*           per lanciare un file che ha un programma associato nel sistema operativo

 

oShell.ShellExecute(“c:\miofile.txt”)

 

in tale caso, l’estensione txt deve essere registrata nel sistema e anche associata ad un certo programma che sa leggere i file di questo tipo.  L’esecuzione di questo metodo  in questo modo e’ come se si facesse doppio-click sul nome del file in Windows Explorer.

 

oShell.ShellExecute(“c:\Documenti\AmoreMio.doc”)

oShell.ShellExecute(“c:\Documenti\AmoreMio.doc”,”open”)

fanno la stessa cosa: lancia il programma associato per i file .doc (winword.exe) e apre il file AmoreMio.doc

Invece:

oShell.ShellExecute(“c:\Documenti\AmoreMio.doc”,”print”) manda per la stampa il file AmoreMio.doc

 

*           per aprire il programma predefinito di e-mail sul sistema

 

oShell.ShellExecute(“mailto:”) oppure

oShell.ShellExecute(“mailto:foxteam@foxitaly.com”)

 

*        per lanciare diverse componenti del Control Panel

 a causa del fatto che i componenti del Control Panel non rappresentano un file sul disk, per avere un link da trasmettere come parametro per il metodo ShellExecute, facciamo prima un collegamento al componente del Control Panel (cioe’ un file lnk). Ad esempio, per poter lanciare la componenta “Regional Options” facciamo un collegamento che lo chiamiamo “c:\Region.lnk”(ad esempio) .A questo punto,

oShell.ShellExecute(“c:\Region.lnk”) lancia la finestra “Regional Options”

La stessa cosa si puo fare con i componenti(connessioni) della finestra “Network and Dial-up Connections” o con i componenti della finestra “Printers”. Solo che in tale situazione, se si pensa per distribuire l’applicazione forse questi collegamenti si dovranno fare manualmente sui computer del cliente(o forse un collegamento fatto su un computer va bene anche se e’ copiato su un altro computer anche con versioni di Windows differenti; si deve verificare).

 

*           per aprire Internet Explorer con una certa pagine web

                            oShell.ShellExecute(“http://www.microsoft.com”)

 

Apre Internet Explorer e porta da internet la pagina dell’indirizzo specificato. Se la connessione telefonica non e’ presente, allora automaticamente si apre la finestra di “Connessione Remota”.

Certo che e’ possibile anche un trasferimento di un file da un server FTP:

oShell.ShellExecute(“ftp://<nomeServer>/<path>/<nomeFile>”)

*        per registrare una DLL, un ActiveX Control (.ocx file) o un OLE COM EXE

                   oShell.ShellExecute(“regsvr32”,”[path]myfile.dll”)

oShell.ShellExecute(“regsvr32”,”[path]UnActiveXControl.ocx”)

oShell.ShellExecute(“mioOLECOM.exe”,”register”)

 

 *       per chiudere la sessione windows

 

                            oShell.ShutdownWindows()

 

*           per sospendere il PC

        
                            oShell.Suspend()

 

*           per lanciare diversi sottoprogrammi del sistema operativo:

 

oShell.FindComputer()

oShell.FindFile()

oShell.FindPrinter()

 

*           per la gestione delle finestre aperte in Windows

 

oShell.TileVertically()

oShell.TileHorizontally()

oShell.MinimizeAll()

oShell.UndoMinimizeAll()

oShell.CascadeWindows()

 

*           per aprire un elemento del “Control Panel”

                            oShell.ControlPanelItem("Printers")

 

*           per aprire la finestra “Date/Time Properties”

                            oShell.SetTime()

 

 

 

                       

La funzione ShellExec                            Torna al metodo ShelExecute

Il metodo oShell.ShellExecute() sembra non funzionare su certi sistemi operativi, come 
ad esempio Windows 98.
Si puo utilizzare invece la seguente funzione equivalente:
 
 
FUNCTION ShellExec
LPARAMETER lcLink, lcAction, lcParms, lcDir,lcModApertura
lcAction = IIF(EMPTY(lcAction), "Open", lcAction)
lcParms = IIF(EMPTY(lcParms), "", lcParms)
lcDir=IIF(empty(lcDir),"",lcDir)
lcModApertura=IIF(empty(lcModApertura),1,lcModApertura)
DECLARE INTEGER ShellExecute ;
    IN SHELL32.dll ;
    INTEGER nWinHandle, ;
    STRING cOperation, ;
    STRING cFileName, ;
    STRING cParameters, ;
    STRING cDir, ;
    INTEGER nShowWindow
 
DECLARE INTEGER FindWindow ;
   IN WIN32API ;
   STRING cNull,STRING cWinName
 
RETURN ShellExecute(FindWindow(0, _SCREEN.caption), ;
                    @lcAction, @lcLink, ;
                    @lcParms, @lcDir, lcModApertura)
 
 
 
Parametri:
 

lcLink :     e’ una stringa che puo rappresentare diverse cose :

*   la path + il nome di un eseguibile ;

*   la path + il nome di un file riconosciuto dal sistema operativo(txt, doc, htm,xls,lnk ecc);

*   tutto cio che ha senso nella finestra Start – Esegui del sistema operativo;

lcAction : è l’operazione definita in Windows per un certo file; se si fa click-destro su un certo

*   file(registrato nel sistema) si vedrà quali sono le operazioni disponibili per quel file.
Quelle comuni sono:

               Apri, Modifica,Print,….

     Quando lcAction non viene specificato, si esegue quella implicita che windows fa vedere in grassetto.

lcParms:  certi programmi accettano parametri nella riga di commando che di solito sono nomi di file .

                   Ad esempio il programma Notepad.exe acceta come parametro nella riga di commando un
                   nome di file di tipo testo:      Notepad.exe c:\autoexec.bat

lcDir :        e’ il la directory di partenza per il programma che si lancia;

 

lcModApertura: fa riferimento al modo in quale la finestra del programma che si lancia sara’ aperta.
                              L’elenco qui sotto contiene i valori possibili per questo parametro.

 

 

Valori per il parametro lcModApertura

Descrizione

1,5,9

Finestra normale col Focus

2

Finestra minimizzata col Focus

3

Finestra massimizzata col Focus

4, 8

Finestra avra’  la posizione e la dimensione della precedenta apertura, ma senza il Focus. La finestra corrente rimane attiva.

6,7

La finestra sara’ aperta come icona senza il Focus. La finestra corrente rimane attiva.

 

Torna al metodo ShellExecute                     Torna all'inizio del documento