Newsgroup: it.comp.lang.visual-basic
Titolo: [?][!] Aprire un file con l'applicazione predefinita

Inizialmente volevo postare con un [?] in quanto vi stavo chiedendo come
si fa a fare quanto in oggetto. Poi ho deciso di cambiarlo in [!]
poiche' mi sono accorto che in realta' stavo mostrando due modi per
farlo e chiedevo semplicemente quale dei due secondo voi fosse il
migliore. Alla fine ho scelto di indicare tutti e due, nella speranza
che qualcuno conosca un terzo metodo che permetta di farlo senza dover
andare a leggere nel registro, ma semplicemente con poche api.
Ma veniamo al problema.
Vorrei scrivere una funzione Apri(ByVal sNomeFile As String) che, dato
il nome di un file, me lo apra utilizzando l'applicazione associata,
ESATTAMENTE come se avessi fatto doppio click sul file in una finestra
di explorer (notare l'enfasi su esattamente).
Per spiegarmi meglio mi appoggero' a questo esempio.
Sul mio pc ai file .avi sono associate le seguenti operazioni:
-Edit: avvia il programma di editing video
-Info: avvia un programma di analisi
-open: riproduce il file con Windows Media Player
-Play: riproduce il file con un player alternativo
l'operazione di default (che viene eseguita col doppio click) e' Play
soluzione 1 - ShellExecute
Se usata, come da documentazione, cosi':
ShellExecute hWnd, "open", sNomeFile, "", "", 0
viene avviata l'applicazione associata alla voce "open" (nel mio caso
WMP) anche se questa non e' la voce predefinita.
Sebbene nella guida come possibili operazioni siano indicate solo "open",
"print" e "explore", in realta' e' possibile usare qualsiasi comando,
nel mio caso è possibile avviare il player alternativo con:
ShellExecute hWnd, "Play", sNomeFile, "", "", SW_SHOWNORMAL
   (Nota sull'ultimo parametro, sebbene la guida dica di usare 0 se
    sNomeFile non e' un eseguibile, questo potrebbe dare problemi.
    Ad esempio se sul mio sistema uso la riga qui sopra per avviare un
    .mp3 con Winamp, indicando 0 la riproduzione parte, ma di Winamp
    nessuna traccia, a meno di cercarlo nell'elenco dei processi)
A questo punto rimane il problema di determinare quale sia l'operazione
predefinita, ma per questo non conosco altro metodo che andarsi a leggere
il registro.
soluzione 2 - FindExecutable
Con l'istruzione:
FindExecutable sNomeFile, sPath, sRetVal
viene restituito il percorso/nomefile dell'eseguibile associato, nel mio
caso mi ritrovo con sRetVal che punta al player alternativo.
Penserete che ora il problema e' risolto, basta avviare il programma con
ShellExecute (o anche con una semplice Shell) e il problema è risolto.
Invece io vi faccio notare quell'ESATTAMENTE.
Riprendendo il mio esempio, col comando play il player viene avviato
passandogli il automatico i parametri per dirgli "a tutto schermo",
"chiudi al termine della riproduzione" e "usa un'altra finestra se gia'
attivo".
Ancora una volta, l'unica via che vedo per determinare tali parametri
e quella di andarseli a pescare da dentro al registro.
Aspetto fiducioso pareri e commenti.
-- 
Samuele Battarra
prova il mio newsreader:
http://news-navigator.sourceforge.net

 
http://news-navigator.sourceforge.net
provato....
errore di runtime,"Nessun record corrente"
complimenti.....
con questi bugs, speri che qualcuno utilizzi il tuo programma??
_______________________________________
{30 - Visual Studio.NET and VC++ development }
_______________________________________

 {30 - Visual Studio.NET and VC++ development }
Tu caro troll invece si che sei figo! <BG>

 Tu caro troll invece si che sei figo! <BG>
Tu hai provato l'eseguibile, io ho provato direttamente i sorgenti, e nei
sorgenti c'è questo problema...ergo
l'eseguibile lo lascio a te, a me interessa solo il codice, non
l'eseguibile...
ma come credi di valutare un programmatore, guardando un exe??
eppure sul sito i sorgenti erano disponibili....
in quanto al caro troll
POV
_______________________________________
{30 - Visual Studio.NET and VC++ development }
_______________________________________

 mio news server! PERCHE'?
E' il controllo della versione, sta controllando se c'e' ne una nuova
disponibile.
-- 
Samuele Battarra


 
E' il controllo della versione, sta controllando se c'e' ne una nuova
disponibile.
-- 
Samuele Battarra


disponibile.
Ok però un bel formino per avvisare l'utente forse ci starebbe! ;-)