aangeklikt bestand bepalen file associations

Status
Niet open voor verdere reacties.

najreteip

Gebruiker
Lid geworden
3 aug 2009
Berichten
19
hallo
Ik ben al redelijk ervaren met visual basic 2008 express.
Ik heb een elektro programma gemaakt en kan de gegevens opslaan onder een extensie ".logic"
Ik heb via Solution explorer > My Project > Publish > Options > File associations deze extensie aan mn programma gekoppeld.
Nu is mn vraag: Hoe kan ik bepalen welk bestand er aangeklikt werd (zodat ik dit kan inlezen)
Ik heb op andere websites al veel andere antwoorden gezien, zoals
Microsoft.VisualBasic.Command function
of
My.Application.CommandLineArgs() function
maar als ik dan mn programma opbouw en dubbelklik op een .logic-bestand, dan zijn deze array's allemaal leeg.
Weten jullie of er een functie bestaat die wel de naam van het aangeklikte bestand meegeeft?
Ik hoop dat je me kan helpen.

mvg Pieterjan
 
Ik kan het zo niet voor je nakijken maar volgens mij is dat beschikbaar in: CmdLine()
 
Ik krijg een error 'Name cmdline is not declared'.
Er staan ook geen error suggesties, dus ik denk dat het vast iets anders moet zijn.
Maar ik vroeg me net af of er geen event zou zijn met een EventArgument waarmee je het startbestand kan bepalen, zoiets als
Event FileOpen(ByVal FileName As String)
of zo, maar helaas is dat nergens te vinden.
Dus nu staan we weer bij het begin.
Toch bedankt voor het antwoord.
Pieterjan
 
Hallo,

ik gebruik daarvoor dit:

Code:
        Dim r As String = Command()
        If r <> "" Then
            If My.Computer.FileSystem.FileExists(r) Then
                   'open file(r)
            End If
        End If

dit werkt bij mij, maar bij command() staan er wel nog appestoffen omheen, bijv:
"C:\test.logic" i.p.v C:\test.logic
dus moet je die appestoffen weghalen

mvg rowano
 
Array is leeg

Ik weet ook niet hoe het komt, maar als ik bv
msgbox(command().count)
doe dan komt er 0 op, besluit: er zit geen enkel item in die array. ook bij andere functies is dat zo.
Zou het misschien niet kunnen dat er eerst iets moet 'geïmporteerd' worden ofzo (Imports ...), zodat er wel commandlineargs in komen?
ik heb nog iets gevonden, maar k ga het thuis s uitproberen
Click on My Project in the Solution Explorer, click on the Debug tab and enter the command line arguments in the Command line arguments field.
 
Laatst bewerkt:
Ik heb het gevonden.
dit is de functie die ik zocht:
Code:
System.AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData
Het is een array die alle bestanden bevat waarop dubbel geklikt werd in windows.
Op deze manier kun je dan bepalen wat je moet inlezen.
Code:
For Each item As String in System.AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData
If item.EndsWith(".ext") = True Then
Dim filename As String = Mid(item, 9).Replace("%20", " ")
MsgBox(My.Computer.FileSystem.ReadAllText(filename))
End If
Next
Ik vraag me enkel af, blijft dit staan als ik dit als "opgelost" aanduid?
Het is misschien praktisch dat andere mensen dit ook kunnen lezen om niet weer diezelfde vraag te moeten stellen.
mvg Pieterjan
 
Laatst bewerkt:
Natuurlijk blijft dit staan! Dat is het handige van fora, dat mensen antwoorden vinden! :)

Goed dat je het antwoord post!
 
Ik heb wel nog een probleempje ontdekt.
Indien het programma een 'single-instance application' is, en het is al geopend,
is het blijkbaar niet mogelijk om nog een bestand te dubbelklikken en in hetzelfde venster te openen.

Ik weet niet of er hiervoor een oplossing is maar ik heb al geprobeerd om een timer op het venster te zetten. Hierbij zet ik diezelfde code dan bij het Tick event van de timer.
Besluit: Object not set to an instance of an object.

Dus waarschijnlijk is het enige wat je kan doen, geen single instance application maken.

groeten Pieterjan
(ps dit was niet echt een vraag, maar mocht je er toch iets op weten, laat het gerust weten)
 
Ik heb al iets gevonden.
Als je in de solution explorer op My project klikt, dan kun je in het tabblad
Application onderaan op View Application Events klikken.
Er komt een tabblad met Namespace My tevoorschijn.
In deze namespace, zie je een klasse MyApplication waarin 5 events beschikbaar zijn
Je kan dus een sub maken met deze events.
Dat ziet er dan bv zo uit

Code:
Namespace My

    ' The following events are available for MyApplication:
    ' 
    ' Startup: Raised when the application starts, before the startup form is created.
    ' Shutdown: Raised after all application forms are closed.  This event is not raised if the application terminates abnormally.
    ' UnhandledException: Raised if the application encounters an unhandled exception.
    ' StartupNextInstance: Raised when launching a single-instance application and the application is already active. 
    ' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
    Partial Friend Class MyApplication

        Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
            Try
                Dim filename As String = Mid(e.CommandLine(0), 9).Replace("%20", " ")
                If filename.EndsWith(".ext") = True Then
                    Msgbox(filename)
                Else
                    Msgbox("Dit bestand heeft niet de juiste extensie")
                End If
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try

        End Sub

        Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException
            MsgBox("Onafgehandelde uitzondering" & vbNewLine & e.Exception.Message)
        End Sub
    End Class

End Namespace

Het event StartupNextInstance zal geraised worden indien de applicatie een single-instance applicatie is en er een gekoppeld bestand of een snelkoppeling naar het programma geopend wordt.
Helaas zie ik dat zelf hier in de property e.CommandLine geen enkel item zit.
Dus ik denk dat het niet mogelijk is om hierbij de bestandsnaam te Get'en.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan