Newsgroup: it.comp.lang.visual-basic
Titolo: aprire tutti i tipi di file....api...

Scusate sono un novizio....
sto facendo una ricerca su internet per vedere come posso aprire
file di ogni tipo con vb.
Il mio scopo č quello di poter aprire un file con un doppio clic su un mio 
elemento in una list view.
Procedimento di questo tipo:
-Clicca su elemento1
-apri connessione col db e leggi il percorso del file
-apri il file.
Devo usare shellexecute???
Qualcuno sa indicarmi un link per capire come utilizzarte questa api???
Grazie e scusate il disturbo 

 Grazie e scusate il disturbo
In windows i tipi di file registrati sono soggetti ad una particolarità e
cioè la possibilità di poter "chiamare" direttamente l'applicazione
predefinita per la creazione/modifica/stampa.
L'elenco deifile conosciuti e dell'applicazione di default è memorizzata
all'interno del registro di windows e, quando necessario, la funzione
ShellExecute si preoccupa di eseguire il lavoro necessario.
ShellExecute è inclussa nella libreria shell32.dll e quindi accessibile
dal VB tramite la seguente definizione:
"
      Private Declare Function ShellExecute Lib "shell32.dll" Alias _
      "ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
      String, ByVal lpszFile As String, ByVal lpszParams As String, _
      ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
"
I parametri che vedi all'interno della dichiarazione sono più semplici da
capire di quello che sembra e nel dettaglio significano:
hwnd - handle della finestra da cui parte l'esecuzione (Per evitare che
l'applicazione chiamata venga chiusa al chiudersi del tuo eseguibile, ti
consiglio di passare l'handle del desktop)
lpszOp - Il tipo di operazione da eseguire (Open, Print... se hai
dimestichezza con il registry di windows ti consiglio di vedere come sono
definite leregistrazioni dei tipi di file nelle sezioni CLASSES)
lpszFile - Il nome del file (che dire di più ...)
lpszParams - parametri aggiuntivi
lpszDir - directory di esecuzione(quella che vuoi a meno che il programma
in oggetto non ne chieda esplicitamente una)
FsShowCmd - la modalità di avvio dell'applicazione.
Tutto qui.
Di seguito ti invio una porzione di codice che puoi incollare all'interno
del codice di una form e ti rimando anche al sito 
www.andreavb.com
 dove
trovi parecchie informazioni a riguardo e che, per me, è stato una vera
mano santa
Ciao
Claudio
      Option Explicit
      Private Declare Function ShellExecute Lib "shell32.dll" Alias _
      "ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
      String, ByVal lpszFile As String, ByVal lpszParams As String, _
      ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
      Private Declare Function GetDesktopWindow Lib "user32" () As Long
      Const SW_SHOWNORMAL = 1
      Const SE_ERR_FNF = 2&
      Const SE_ERR_PNF = 3&
      Const SE_ERR_ACCESSDENIED = 5&
      Const SE_ERR_OOM = 8&
      Const SE_ERR_DLLNOTFOUND = 32&
      Const SE_ERR_SHARE = 26&
      Const SE_ERR_ASSOCINCOMPLETE = 27&
      Const SE_ERR_DDETIMEOUT = 28&
      Const SE_ERR_DDEFAIL = 29&
      Const SE_ERR_DDEBUSY = 30&
      Const SE_ERR_NOASSOC = 31&
      Const ERROR_BAD_FORMAT = 11&
      Function StartDoc(DocName As String) As Long
          Dim Scr_hDC As Long
          Scr_hDC = GetDesktopWindow()
          StartDoc = ShellExecute(Scr_hDC, "Open", DocName, _
          "", "C:\", SW_SHOWNORMAL)
      End Function
      Private Sub Form_Click()
          Dim r As Long, msg As String
          r = StartDoc("C:\WINDOWS\ARCADE.BMP")
          If r <= 32 Then
              'There was an error
              Select Case r
                  Case SE_ERR_FNF
                      msg = "File not found"
                  Case SE_ERR_PNF
                      msg = "Path not found"
                  Case SE_ERR_ACCESSDENIED
                      msg = "Access denied"
                  Case SE_ERR_OOM
                      msg = "Out of memory"
                  Case SE_ERR_DLLNOTFOUND
                      msg = "DLL not found"
                  Case SE_ERR_SHARE
                      msg = "A sharing violation occurred"
                  Case SE_ERR_ASSOCINCOMPLETE
                      msg = "Incomplete or invalid file association"
                  Case SE_ERR_DDETIMEOUT
                      msg = "DDE Time out"
                  Case SE_ERR_DDEFAIL
                      msg = "DDE transaction failed"
                  Case SE_ERR_DDEBUSY
                      msg = "DDE busy"
                  Case SE_ERR_NOASSOC
                      msg = "No association for file extension"
                  Case ERROR_BAD_FORMAT
                      msg = "Invalid EXE file or error in EXE image"
                  Case Else
                      msg = "Unknown error"
              End Select
              MsgBox msg
          End If
      End Sub
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio 
news:cqpdgk$egd$1...@news.newsland.it...

Non so veramente come ringraziarti....
La tua risposta è stata perfetta!!!!
Grazie mille!!!!

 >> Grazie e scusate il disturbo
Il mio metodo č moooolto piů semplice e funziona praticamente sempre:
Private sub lancia()
Dim Percorso as string
Percorso = "C:\windows\calc.exe"
Dim MyShell
Set Myshell = Createobject ("Wscript.Shell")
MyShell.Run (percorso)
'tutto quello che metti qui funziona ala chiusura del file che hai appena
aperto
End Sub

 End Sub
Sì, ma il problema è quello di lanciare un file associato all'applicazione
predefinita senza conescere quale essa sia!!!
;-)


 End Sub
Ed inoltre utilizzando le API puoi controllare anche lo stato di
esecuzione del programma (es. WaitForSingleObject....) e comportarti di
onseguenza...
;-)


 onseguenza...
A essere pignolo, con WaitForSingleObject va anche gestito il timeout
perche' se si impalla l'applicazione chiamata allora si impalla anche
il chiamante.
-- 
ciao, hal

 Free-styler wrote:


Era solo un esempio.....


 ha scritto nel messaggio
news:ESWzd.574310$35.24...@news4.tin.it...


 > Il mio metodo č moooolto piů semplice e funziona praticamente sempre:
