In bereits geöffnetem Explorer-Fenster eine Datei Selectieren

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    In bereits geöffnetem Explorer-Fenster eine Datei Selectieren

    Hallo an alle,

    ich hab mal wieder eine hoffentlich "kleine" Frage. Ich verwende folgende Funktion, um ein Explorer Fenster zu öffnen, und die Datei hinter dem angegebenen Pfad zu selektieren.

    VB.NET-Quellcode

    1. Sub OpenExplorerWithFile(ByVal path As String)
    2. Dim p As New ProcessStartInfo
    3. p.Arguments = "/e,/select," & path & ""
    4. p.FileName = "explorer.exe"
    5. Process.Start(p)
    6. End Sub


    Hintergrund ist: Ein GUI in welchem Daten eingetragen werden, anschließend wird mit diesen Daten eine Wordvorlage bearbeitet und abgespeichert, dann öffnet sich der Pfad und die neue Datei ist angewählt.

    Nun mein Problemchen, ich finde es eher ungut wenn ich das Programm z.B. ein zweiter mal laufen lasse, wird einfach (natürlich) eine weiteres Explorer Fenster geöffnet und die neue File selektiert.

    Jetzt kann ich mit:

    VB.NET-Quellcode

    1. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
    2. Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    3. End Function


    prüfen, ob bereits ein Explorer Fenster mit dem entsprechenden Pfad geöffnet ist, aber wie kann ich nun (dieses Fenster wird in den Vordergrund gestellt) in einem bereits offenen Explorer-Fenster eine andere Datei selektieren ?
    Also im Prinzip: Fenster bereits offen, dann ab in den Vordergrund und die neue File Selektieren, ist es nciht offen mach ich ja ein neues auf =)


    Ich hoffe ich habe mich verständlich ausgedrückt =)

    LG und Danke
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    @asusdk
    Vielleicht über Tasks, den entsprechenden Task suchen, nehmen und darüber arbeiten.

    Edit:
    Über den Task-Manager sieht man doch alle Tasks, die laufen.

    Edit 2:
    @VaporiZed
    Ist das mit den Tasks überhaupt möglich?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „a.b_om“ ()

    Eine Möglichkeit, die mir auf die Schnelle einfällt: Wenn Du im Explorer den Dateinamen eintippst und Dir zwischen den Tastendrücken jeweils weniger als 0,5 (?) Sekunden Zeit lässt, kommst Du bei der gewünschten Datei raus. Das ließe sich automatisieren. Leider am einfachsten mit der VB6-Namespace-Funktion SendKeys :/

    Oder Du schließt eventuell vorher offene Fenster? Als Notlösung

    ##########

    @a.b_om: Den Task braucht er nicht explizit herzuholen, den bekommt er ja auch über die Process-Instanz, die er erstellt. Klar kann man damit weiterzuarbeiten. Aber wie konkret ist hier die Frage.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    hm, sehr schade, dann werd ich wohl damit vorlieb nehmen das er doch jedes mal ein neues Fenster öffnet. Finde nämlich gar nichts dazu, nicht mal im cmd oder Windows forum.

    Dennoch Danke an alle =)
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Nun ja, die SenKeys-Methode möchte ich schon allein aus VB6-Gründen eher nicht verwenden, und selbst mit Tasks usw. finde ich kein Möglichkeit dann "neue" befehle an ein Explorer-Fenster zu senden, ich vermute einfach das M$ eine derartige Möglichkeit für den Explorer nie vorgesehen hat.
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ich war mal so frei. Damit selektiert man aus einem offenen Windows Explorer Ordner eine bestimmte Datei:

    VB.NET-Quellcode

    1. Dim YourDirectory = AutomationElement.RootElement.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, NameOfYourDirectory))
    2. Dim File = YourDirectory.FindFirst(TreeScope.Descendants, New PropertyCondition(AutomationElement.NameProperty, NameOfYourFile))
    3. DirectCast(File.GetCurrentPattern(SelectionItemPattern.Pattern), SelectionItemPattern).Select()

    restliche Infos z.B. bzgl. zu importierende Namespaces in (Eigenwerbung) externe Net Programme auslesen und manipulieren
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Folgendes sollte doch klappen oder?

    VB.NET-Quellcode

    1. Dim filePath As String = "C:\Users\Patschka\Pictures\NewTemp\1.png"
    2. Dim argument As String = $"/select, """"{filePath}"""
    3. System.Diagnostics.Process.Start("explorer.exe", argument)


    Klappt bei mir zumindest!

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ja, aber es geht m.E. darum, dass er beim 2. Klick nicht noch ein Fenster öffnen, sondern das bestehende nutzen will.

    Ah, da warst Du schneller.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Sorry, hab ich nicht genau genug gelesen.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##