Announcement

Collapse
No announcement yet.

Programm per "Send To"

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Programm per "Send To"

    Hallo,

    um mein Problem zu erklären, muss ich Euch mal beschreiben wie meine Lösung bis jetzt im VB6 ist:

    Ich habe ein Programm erstellt, was die Übergabeparameter verarbeitet,
    Code:
    var=command$
    Dann habe ich eine .EXE erzeugt und diese in den Ordner "SendTo" kopiert,
    Code:
    C:\Dokumente und Einstellungen\USER\SendTo
    Danach konnte ich, eine Datei Rechts-Anklicken "Senden an.." dann mein Programm und die Datei wurde verarbeitet.

    Nun möchte ich das Programm gern in VB.NET 2005 realisieren, ABER ich bekomme ja keine .EXE Datei herraus sondern nur ein Verweis in den Programmen, meine .EXE aus dem /BIN und /DEBUG /RELEASE Ordnern bei mir auf den Rechner (wo ich es entwickelt habe) funktioniert nicht auf anderen Rechnern, auf anderen Rechner muss ich es per SETUP installieren und dann erstellt er mir den Verweis.

    Kann mir jemand sagen, wie ich das mit dem Übergabeparameter bei VB.NET machen kann, eventuell gibt es noch einen anderen WEg.

    Danke schonmal , gruß Alex

  • #2
    Gelöst

    Hallo,

    ich habe die Sache "gelöst", die .exe-Datei aus dem /RELEASE-Ordner hat funktioniert.
    Ich habe keine Ahnung, warum die EXE damals nicht funktioniert hat. Eventuell, weil ich noch andere Verweise (Office) drin hatte?

    Eine andere Sache hat mich gewundert, wenn ich Dateien mit einen Leerzeichen im Pfad, meinen Programm übergebe, werden diese Dateien in "gesetzt und durch Leerzeichen getrennt:
    Code:
    "C:\Ver zeichnis\datei1" "C:\Ver zeichnis\datei2"
    Übergebe ich eine Datei(en) ohne Leerzeichen, dann kommen sie ohne ".

    Ich habe es nun so gelöst, wenn die Übergabeparameter ohne führendes " kommen, dann trenne ich es mit
    Code:
    split
    auf, als Trenner das Leerzeichen.
    Wenn der Übergabeparameter mit führenden " kommt gehe ich den String mit Stringmanipulation durch und zerteile ihn.

    Gibt es dafür eventuel noch eine elegantere Lösung?

    Hier mein Code:

    [highlight=vbnet]
    Public Sub read_command_line(ByVal param_string As String)
    'speichert sie einzelen Dateien in ein Array
    Dim i As Long
    Dim start_pos As Long
    Dim pfad_start As Boolean = False
    param_string = Command()

    If Mid(param_string, 1, 1) = """" Then 'wenn der String mit einen " beginnt, sind die einzelnen Dateien als "Pfad" "Pfad2" und müssen gefiltert werden
    For i = 0 To param_string.Length - 1
    If i = 0 Then
    pfad_start = True
    start_pos = 0
    GoTo weiter
    End If
    If pfad_start = False And param_string.Substring(i, 1) = """" Then
    start_pos = i
    pfad_start = True
    GoTo weiter
    End If
    If pfad_start = True And param_string.Substring(i, 1) = """" Then
    dateien.Add(param_string.Substring(start_pos, i - start_pos))
    pfad_start = False
    GoTo weiter
    End If


    weiter:
    Next
    Else 'beginnen nicht mit " dann sind die Dateien nur durch Leerzeichen getrennt
    Dim dat_ar() As String
    dat_ar = Split(param_string, " ")
    For s As Integer = 0 To UBound(dat_ar)
    dateien.Add(dat_ar(s))
    Next
    End If
    For Each pfade As String In dateien
    'MsgBox(pfade)
    Debug.Print(pfade)
    Next
    End Sub
    [/highlight]

    Gruss Alex

    Comment


    • #3
      Hallo Alex,

      Dein Verfahren mit Split und neu verbinden ist (gelinde gesagt) suboptimal. Durch die Gänsefüßchen ist doch sichergestellt, dass ein Argument als Ganzes ankommt. Wenn sie Dich für die weitere Verarbeitung stören, ist String.Trim sinnvoller.

      Jürgen

      Comment


      • #4
        Hallo Jürgen,

        danke für die schnelle Antwort.

        ich glaube, wir reden aneinander vorbei
        Ich bekomme an mein Programm die Übergabeargumente als String übergeben, z.B.
        Code:
        C:\test\datei1 C:\test\datei2 C:\test\datei2
        oder
        Code:
        "C:\test daten\datei1" "C:\test daten\datei2" "C:\test daten\datei2"
        Also muß ich es ja auswerten ob sie in " kommen, ich kann es ja nicht beeinflussen(wenn in dem Pfadnamen Leerzeichen sind, kommt es mit "), dannach speichere ich sie ja in einem Array und arbeite diesen in einer for-each-Schleife ab, und öffne jede einzelne Datei, also brauche ich die Pfade einzeln.
        Die " interessieren mich nur soweit, das ich wissen muß wie ich den String verarbeite.

        @Split, ich könnte ja meinen Code auch so abändern, dass ich nicht Split nehme, sondern auf die Leerzeichen prüfe, aber ist das nicht umständlich, etwas "zu fuss" zu machen, obwohl es eine Methode gibt?

        Meine Frage zielte darauf hinaus, ob es ein Objekt oder Methode gibt, wo man die Übergabeparameter automatisch trennen kann, ogal ob mit " oder ohne.

        gruss Alex

        Comment


        • #5
          Hallo Alex,

          nein, ich hatte Dich genauso verstanden. Deine Beispiele enthalten jeweils 3 Argumente. Diese werden doch in der Main-Methode bereitgestellt:
          Code:
          Sub Main(ByVal cmdArgs() As String)
          Also machst Du Dir eine List<string> als Ziel-Objekt, in einer foreach-Schleife nimmst Du jedes der übergebenen Argumente und fügst das Resultat von Argument.Trim(Gänsefüßchen) in die List<string> ein. Wenn das Argument nicht in Gänsefüßchen eingebunden ist, wird das Argument eben unverändert notiert.

          Ich hoffe, jetzt ist klar, wie ich es meine. Jürgen

          Comment


          • #6
            Wenn du keinen Zugriff mehr auf die übergebenen Kommandozeilenparameter aus der Main mehr hast, an der Stelle an der read_command_line aufgerufen wird, so bekommst du die auch per System.Environment.GetCommandLineArgs().

            Comment


            • #7
              Hallo,

              ja jetzt habe ich es begriffen, sorry manchmal hat mal Scheuklappen vor den Augen.
              Natürlich ist es beeser, die CommandLineArgs als Liste zu verarbeiten, anstatt den String zu parsen.
              Es funktioniert auch ohne Probleme, es kommen auch keine " also brauche das String.Trim(Hochkomma) garnicht.

              Da spare ich mir eine Menge Code und umgehe Fehler beim Parsen.

              Eine Sache ist ein wenig störend, aber habe ich auch umgangen, das erste Element der CommandLineArgs ist der Programmpfad, meine Programms.
              Aber ich lösche immer das 1. Element und habe damit keine Probleme.

              Danke für Eure Hilfe.

              Gruss Alex

              Comment

              Working...
              X