Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB.NET]Associare estensione file al mio programma

    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.

  2. #2
    Quando faccio doppio click sul file con estensione associata al mio programma come faccio a recuperare il percorso del file?

  3. #3
    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.

  4. #4
    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):
    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
    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"
    Qualche consiglio?

  5. #5
    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.

  6. #6
    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
    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
    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

  7. #7
    Originariamente inviato da mardok30
    L'impostazione che ho nel Registro sotto Shell/open/command è "PercorsoProgramma.exe" "%1" e non come dici tu
    tuoprogramma.exe "%1";
    Io ti dicevo che, qualora fosse stato
    codice:
    Percorsoprogramma.exe %1
    per far sì che tutto il nome del file da aprire stesse in un parametro avresti dovuto modificarlo in
    codice:
    Percorsoprogramma.exe "%1"
    (il ";" era usato come normale segno di interpunzione nella frase, non rappresentava nulla che dovevi inserire).
    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).
    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
    Semplicemente si tratta di una funzione che restituisce l'intero contenuto della linea di comando (il suo percorso per intero è Microsoft.VisualBasic.Interaction.Command()).
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    il ";" era usato come normale segno di interpunzione nella frase, non rappresentava nulla che dovevi inserire
    ";" era inserito in corsivo perciò pensavo devesse essere inserito nella voce di registro, comunque l'importante è capirsi
    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

  9. #9
    Originariamente inviato da mardok30
    ";" era inserito in corsivo perciò pensavo devesse essere inserito nella voce di registro,
    Il ; non era in corsivo... ho riguardato il codice del mio post:
    codice:
    chiami [i ]tuoprogramma.exe "%1"[/i ]; in questa maniera il percorso
    . Comunque, come dici tu, l'importante è capirsi.
    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
    Non riesco a capirlo neanch'io... se il riferimento nel registro era identico non mi spiego questo fatto...
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.