Quali sono le chiavi di registro da modificare per associare una estensione al mio programma? Come gestisco poi il doppio click sul file che mi farà aprire la mia applicazione? mi servirebbe sapere il percorso del file.
![]()
Quali sono le chiavi di registro da modificare per associare una estensione al mio programma? Come gestisco poi il doppio click sul file che mi farà aprire la mia applicazione? mi servirebbe sapere il percorso del file.
![]()
Quando faccio doppio click sul file con estensione associata al mio programma come faccio a recuperare il percorso del file?
![]()
Una volta associata l'estensione al tuo programma con i metodi "classici" di Windows al tuo programma verrà passato sulla linea di comando il nome del file; puoi recuperare il contenuto della linea di comando o "pescandolo" dagli argomenti passati al Main del tuo programma o tramite la funzione Command().
Amaro C++, il gusto pieno dell'undefined behavior.
Ho usato questo metodo per recuperare il percorso del file, ho creato un modulo che imposto come oggetto di avvio(ho usato questo metodo perché mi è servito anche per risolvere un altro problema di cui ho parlato in un'altro mio recente thread):
Solo che, quando apro il programma con il doppio click sul file con estensione associata, l'array args() mi divide in automatico il percorso del file in base agli spazi, perciò ho dovuto mettere il For Each...nonostante ciò la variabile percorso così generata non avrà gli spazi, ottenendo un percorso inesistente. Es. se gli passo "C.\documents and settings\user\prova.txt" il percorso che ottengo è "C.\documentsandsettings\user\prova.txt"codice:Module StartupModule Dim applicazione As New FrmMain Sub Main(ByVal args() As String) Try Dim s As String Dim percorso As String For Each s In args percorso &= s Next StringaConnessione = percorso Application.EnableVisualStyles() AddHandler Application.ThreadException, AddressOf GestoreEccezioni Application.Run(applicazione) Catch MessageBox.Show(Err.Description) End Try End Sub End Module
Qualche consiglio?
![]()
Modifica l'associazione di file in modo che, invece di chiamare tuoprogramma.exe %1 chiami tuoprogramma.exe "%1"; in questa maniera il percorso e il nome del file (senza virgolette) confluirà automaticamente in args(0).
In alternativa puoi ottenere tutta la linea di comando (non suddivisa) tramite la funzione Command().
Amaro C++, il gusto pieno dell'undefined behavior.
L'impostazione che ho nel Registro sotto Shell/open/command è "PercorsoProgramma.exe" "%1" e non come dici tu
tuoprogramma.exe "%1";
Comunque con il codice che posto sembre funzionare tutto correttamente
Per la funzione Command() non ho trovato nulla che mi abbia illustrato il suo utilizzo pertanto ho desistito...codice:Dim applicazione As New FrmMain Sub Main(ByVal args() As String) Try dim percorso as string If args.Length > 0 Then percorso = args(0) End If Application.Run(applicazione) Catch MessageBox.Show(Err.Description) End Try
Ciao e grazie mille per il supporto![]()
Io ti dicevo che, qualora fosse statoOriginariamente inviato da mardok30
L'impostazione che ho nel Registro sotto Shell/open/command è "PercorsoProgramma.exe" "%1" e non come dici tu
tuoprogramma.exe "%1";
per far sì che tutto il nome del file da aprire stesse in un parametro avresti dovuto modificarlo incodice:Percorsoprogramma.exe %1
(il ";" era usato come normale segno di interpunzione nella frase, non rappresentava nulla che dovevi inserire).codice:Percorsoprogramma.exe "%1"
Appurato che la voce di registro è già corretta, il codice che posti conferma che il percorso e il nome del file vengono correttamente inseriti in args(0).
Semplicemente si tratta di una funzione che restituisce l'intero contenuto della linea di comando (il suo percorso per intero è Microsoft.VisualBasic.Interaction.Command()).Per la funzione Command() non ho trovato nulla che mi abbia illustrato il suo utilizzo pertanto ho desistito...
Ciao e grazie mille per il supporto![]()
Amaro C++, il gusto pieno dell'undefined behavior.
";" era inserito in corsivo perciò pensavo devesse essere inserito nella voce di registro, comunque l'importante è capirsiil ";" era usato come normale segno di interpunzione nella frase, non rappresentava nulla che dovevi inserire![]()
Mi sapresti aiutare a capire il perché, seppure la voce del registro fosse la medesima, nel primo codice che ho postato il percorso del file veniva "spezzato" dividendolo in base agli spazi, quindi avevo che args() aveva dimensione >1 e adesso(che il codice è uguale a quello di prima) args() ha dimensione 1 e il percorso del file viene passato correttamente?
Ciao![]()
Il ; non era in corsivo... ho riguardato il codice del mio post:Originariamente inviato da mardok30
";" era inserito in corsivo perciò pensavo devesse essere inserito nella voce di registro,
. Comunque, come dici tu, l'importante è capirsi.codice:chiami [i ]tuoprogramma.exe "%1"[/i ]; in questa maniera il percorso
Non riesco a capirlo neanch'io... se il riferimento nel registro era identico non mi spiego questo fatto...Mi sapresti aiutare a capire il perché, seppure la voce del registro fosse la medesima, nel primo codice che ho postato il percorso del file veniva "spezzato" dividendolo in base agli spazi, quindi avevo che args() aveva dimensione >1 e adesso(che il codice è uguale a quello di prima) args() ha dimensione 1 e il percorso del file viene passato correttamente?
Ciao![]()
Amaro C++, il gusto pieno dell'undefined behavior.