Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Avviare l'applicazione predefinita per l'estensione.

E' una curiosità che ho da un po' di tempo: è possibile aprire un file
(dati) da codice senza conoscere a priori l'exe con cui aprirlo (e il suo
percorso esatto), ovvero è
possibile richiamare automaticamente l'applicazione predefinita per
l'apertura di un file con una certa estensione come avviene facendo doppio
clic sul file stesso?
Se è possibile, come verificare l'esistenza di un'applicazione predefinita
per quella estensione?
Credo che una soluzione sarebbe l'analisi del registro, cioè posso cercare
l'estensione del file da aprire nella chiave
HKEY_LOCAL_MACHINE\SOFTWARE\Classes, poi nella stessa chiave leggo qual'è
l'exe da usare per il comando "open"; però non è semplice (provate a dare
un'occhiata con "regedit") e mi chiedo se c'è un metodo più abbordabile!
Ciao.

 ha scritto nel messaggio


non ho provato x' sono online, ma secondo me se fai shellexecute di un mdb
parte access.
se non c'e' un associazione dovrebbe apparire "apri con".
poi credo dipenda da come funziona con un doppio clic in gestione risorse.
alcuni prg sono abbastanza stupidi, partono ma vuoti e/o ti chiedono che
file aprire.
ciao, a.

 un'occhiata con "regedit") e mi chiedo se c'č un metodo piů abbordabile!
Ti assicuro che non č cosě complesso: il registro ha sostituito i vecchi ini
anche per questo.
Comunque per leggere nel reg prova l' api RegQueryValueEx.
Ciao
Daniele Grignani

 Daniele Grignani
ho provato ora:
Private Sub Command1_Click()
    On Error GoTo errman
    Dim iRet As Long
    iRet = ShellExecute(Me.hwnd, vbNullString, _
        "wlog.mdb", vbNullString, CurDir, 1)
    Exit Sub
errman: MsgBox Error
End Sub
si apre access con wlog.mdb dentro.
con un txt si apre l'editor di default.
ciao, a.


Cosentitemi l'intrusione:
    L'API FindExecutable ha il compito proprio di rintracciare il programma
eseguibile per poter aprire il tipo di file specificato come parametro.
Ovviamente poi si potrà eseguire il programma trovato dalla funzione con
ShellExecute.
Provare x credere.
Ciao.
fra...@iname.com

 ciao, a.
E' vero! Ho fatto alcune prove e funziona.
Mi sembra la soluzione più semplice, grazie.
Grazie anche agli altri, naturalmente!
PS
Per chi non lo sapesse, bisogna inserire nel codice del form la seguente
dichiarazione:
Private Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal
lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String,
ByVal nShowCmd As Long) As Long

.....Si ha sempre da imparare (scusatemi l'ovvietà).
Per quanto riguarda ShellExecute, ebbene non ci a vevo mai pensato. Invece
l'api FindExecutable, bè mi sembra l'idea + appetibile in quanto, presumo,
ti restituisca un path che magari è possibile controllare. Inoltr  parrebbe
("a naso") meno macchinosa di RegQueryValueEx.
Ciao
Daniele Grignani

Prova questo pezzo di codice:
Public Declare Function ShellExecute Lib "shell32.dll" Alias
"ShellExecuteA" _
    (ByVal hwnd As Long, _
    ByVal lpOperation As String, _
    ByVal lpFile As String, _
    ByVal lpParameters As String, _
    ByVal lpDirectory As String, _
    ByVal nShowCmd As Long) As Long
Public Const SW_SHOW As Long = 1
Public Sub MySub(frm As Form, _
                  ByVal QuelCheVuoi As String)
    Dim h As Long
    h = ShellExecute(frm.hwnd, "open", QuelCheVuoi, "", "", SW_SHOW)
End Sub
Se fai qualcosa del tipo 
Call MyHelp(Me, "miodoc.htm") 
ti apre il browser associato, idem con altre associazioni.
Ciao
gs

 ti restituisca un path che magari è possibile controllare.
non lo conosco per niente. come funzia, e a che serve ?
grazie e ciao, a.

E per gli smanettoni di VBScript:
set wshell = CreateObject("Wscript.Shell")
call wshell.Run("filename", 1)

 lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As
String,


 passare "open" per l'apertura dei file!
gia', non ho controllato. prob shellexec esegue la prima delle operazioni
associate, cfr gestione risorse, che normalmente e' open. se invece fosse
"format c:" sarebbe interessante il risultato...
ciao, a.