Aprire un file con il programma associato

mercoledì 29 giugno 2005 - 10.15

GuardianOfTheFlame Profilo | Junior Member

Ciao a tutti,
devo gestire l'apertura di un allegato e-mail. Ammettendo di averne l'elenco in una lista, ho pensato di usare l'evento doppio click per aprirlo. In che modo posso visualizzarlo con il programma ad esso associato? ( per es. in un'istanza di Adobe reader per un pdf, di excel per un xls, etc. )
Grazie!
Salo

Andy Profilo | Senior Member

Ciao..io creerei una tabella, con 2 campi, 1 per l'estensione file (allegato) e 1 con il percorso esatto del programma da utilizzare.
Quando hai un allegato in mail, vai nella tabella, cerchi l'estensione nel campo1, e leggi il campo2 con nome programma associato.

Poi lanci il processo:

Process.Start(<Percorso letto nel campo>, <allegato da aprire>)

GuardianOfTheFlame Profilo | Junior Member

Riciao,
quello che vorrei fare è sfruttare le funzionalità del sistema.
Non so se sia effettivamente possibile usarle, ma il sistema è già in grado di riconoscere se un file è associato ad un programma o meno e io vorrei accedere a questa informazione.
Mi spiego meglio con un esempio: nel mio pc a casa, ho winamp, real player, wmp e divx player, ma ho associato i file .avi a winamp. Se io clicco su un file.avi dall'esplora risorse, il sistema sa già che deve aprirlo con winamp. Se nessun programma è associato all'estensione ( x es. se creo un file di estensione .kkk ) l'explorer apre una finestra di sistema che mi chiede quale programma voglio usare per aprirlo.
Se fosse possibile riutilizzarle, mi semplificherebbe le cose, xché io non posso sapere quali programmi sono installati nel pc del mio cliente o quale lui associa ai file ( magari preferisce aprire gli avi con real player! )... il tuo consiglio potrebbe cmq essermi utile se non trovo altre soluzioni, xché in pratica dovrei ricreare le funzionalità di sistema che ti dicevo ( il problema, oltre al tempo è anche di solidità! io qualche baco lo metterei di sicuro! ;-) )

Salo

GuardianOfTheFlame Profilo | Junior Member

Ho scoperto come aprire il file con il programma associato dal sistema:

Dim myFile As String = "C:\File.txt"
Dim p As System.Diagnostics.Process
p.Start(myFile)


Solo che se nessun programma è associato genera un eccezione. Qualcuno sa se posso richiamare la finestra di sistema per scegliere il programma con cui aprire un file?

Cteniza Profilo | Guru

Birbante!
Sono io che ti ho suggerito quella cosa.
Cosa fai? giochi su tavoli diversi?
Se al file indicato non è associato nulla puoi "agire" di riflesso e gestire l'eccezione (try / catch) ed eventualmente far comparire una finestra "apri con".
Certamente che nel tuo programma, salvo lavorare "di fino" non puoi pretendere di ripetere quello che fa il sistema operativo.
Magari puoi andare a vedere nel registro se l'estensione è presente.


GuardianOfTheFlame Profilo | Junior Member

Ciao CTeniza!
Scusa ma non avevo capito che in realtà la risposta di Andy, con una piccola modifica, era ciò che mi serviva e quindi ho chiesto anche da altre parti.
Non voglio certo rubarti i meriti ci mancherebbe! ...Quindi ti ringrazio anche in questa sede!
ma visto che avevo postato anche qui mi sono risposto in modo che se qualcuno guarderà il thread saprà come risolvere il problema senza cercare altrove.

In totale: process.start è in grado di aprire il file con il programma specificato o, se non specificato, con quello associato dal sistema.

Solo una cosa non ho capito: posso richiamare la finestra "Apri Con" di sistema o devo crearne io una con una text per richiedere il programma da lanciare?
Di nuovo
Salo

Cteniza Profilo | Guru

Questa è la risposta di Marco Bellinaso (vb2themax):

ShowOpenWithDialog - Displaying and opening a file through the "Open with..." dialog

' Display the "Open with..." dialog and open the specified file with the
' selected program
' Example: ShowOpenWithDialog("d:\test.txt")

<System.Runtime.InteropServices.DllImport("shell32")> Shared Function _
ShellExecute(ByVal hwnd As Integer, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Integer) As Integer
End Function

Sub ShowOpenWithDialog(ByVal filename As String)
ShellExecute(0, String.Empty, "RUNDLL32.EXE", "shell32.dll,OpenAs_RunDLL " _
& filename, "", 0)
End Sub


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5