brauche hilfe beim wiederherstellen des letzten geöffneten Dateipfades

  • hi an alle
    (und sry, das ich schonwieder das forum mit meinen Mist belästigen muss :D )
    Ich komm mal wieder einfach nicht weiter - vermutlich ist das auch auch das falsche Forum für meine Frage, aber vielleicht findet sich ja doch jemand, der vielleicht auch mit ner ganz anderen denkweise ne idee einbringen kann.

    also folgendes - ich möchte mit autoIt eine exe schreiben, die mir beim ausführen den letzten Pfad im Arbeitsplatz wieder öffnet.
    (da es [zumindest bei mir] doch häufig vorkommt, das ich nochmal in den Ordner muss wo ich zuletzt drinn war, - sei es durch versehntliches schließen oder sonst was.)
    nur komm ich leider mit dem Problem überhaupt nicht weiter. ich hab schon mal in der registry geschaut, aber keinen Pfad gefunden, der ähnlich wie "zuletzt verwendete Dokumente" Dateipfade speichert.
    Oder wär es sinnvoll eine Anwendung zu schreiben, die permanent geöffnet ist und die Pfade des Arbeitsplatzes ausliest und speichert? wie könnte man das machen? oder wie sonst realisieren? jemand eine idee?

    WiDDoW

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

    Einmal editiert, zuletzt von WiDDoW (14. Januar 2009 um 14:27)

  • Da ich nicht glaube, dass der letzte Pfad irgendwo gespeichert wird, bleibt dir nur Möglichkeit 2.

    Dabei würde ich folgendes für den Explorer einstellen:
    aktiviere: Ordneroptionen->Ansicht->Vollständigen Pfad in der Titelleiste anzeigen

    Dann musst du ein Tool schreiben, dass ständig alle Fenstertitel ausliest (winlist(...)) und aus dieser Liste den Titel filtern, der einen Pfad enthält (evtl. durch :\ eindeutig)

    • Offizieller Beitrag

    Vermutlich für den Explorer?!

    Dafür habe ich mal ein Script erstellt:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <ListBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    Global Const $WS_EX_COMPOSITED = 0x02000000 ; Windows XP: Paints all descendants of a window in bottom-to-top painting order using double-buffering.
    $hGui = GUICreate('Liste der zuletzt benutzten Verzeichnisse', 300, 430, @DesktopWidth-306, 0, BitOR($WS_SYSMENU, $WS_SIZEBOX), $WS_EX_COMPOSITED)
    $hList = GUICtrlCreateList('', 5, 5, 290, 355, BitOr($GUI_SS_DEFAULT_LIST, $LBS_NOTIFY))
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
    $hClear = GUICtrlCreateButton('Liste löschen', 110, 365, 80, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKHCENTER+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE)
    GUISetState()
    WinSetOnTop($hGui, '', 1)
    Global $sPath, $sOldPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hList
    $sPath = GUICtrlRead($hList)
    If $sPath <> '' Then
    ControlSetText('[CLASS:CabinetWClass]', '', 'Edit1', $sPath, 1)
    ControlSend('[CLASS:CabinetWClass]', '', 'Edit1', '{ENTER}')
    EndIf
    Case $hClear
    GUICtrlSetData($hList, '')
    EndSwitch
    $sPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    If $sPath <> $sOldPath Then
    $sOldPath = $sPath
    GUICtrlSetData($hList, $sPath)
    EndIf
    WEnd

    [/autoit]

    Edit: Noch ein bißchen angepasst, sodass man es auch in der Größe verändern kann.


  • ich werd mal versuchen mich reinzufitzen... (wobei ich glaube der programmcode ist mindestens eine Nummer zu hoch für mich)
    ich werd mich melden wenn probleme auftreten - derweil erstmal vielen vielen dank für die mühe

    WiddoW


    edit:

    Zitat

    Hi,

    für welche Anwendung denn?

    Mega


    hi Xenobiologist
    naja fürn Arbeitsplatz also Explorer halt - naja jedenfalls den von start - ausführen - "explorer" nenn ihn wie du willst ;)

    edit 2: also die idee mit erstaml nur dem öffnen eines kleinen Fensters mit der Liste find ich schon mal genial (ist viel besser als einfach nur stur den letzten Pfad zu öffnen) aber was ich noch net so dolle finde, wenn das Explorer Fenster geschlossen wird löscht sich auch der Eintrag da raus. der müsste so lange stehen bleiben wie das ganze Fenster(Liste der zuletzt benutzten Verzeichnisse) besteht oder man auf Liste löschen klickt. also wenn da noch jemand was ergänzen möchte - wär super.
    aber ich werd mich auch mal dran versuchen - übung macht ja bekanntlich den Meister :)

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

    2 Mal editiert, zuletzt von WiDDoW (14. Januar 2009 um 11:36)

    • Offizieller Beitrag

    Hi,

    bevor du sowas automatisierst oder dir ein Skript schreibst, würde ich dir folgendes vorschlagen. (So mache ich das)

    1. Total Commander nutzen
    2. Die * Funktion nutzen.
    Hiermit kannst du beliebte Verzeichnisse einfach hinterlegen. Dann per Knopfdruck dorthin springen.

    Mega

  • ja ich kenne den total commander, hab ihn auch mal eine zeit lang benutzt.
    aber irgendwie hat er sich bei mir nicht so richtig durch gesetzt.

    Ich hab ein Logitech G15 keyboard und versuche grade da mit einem klick auf eine sondertaste das starten verschiedener Programme zu ermöglichen.
    will da jetzt aber nicht näher drauf eingehen. Soll reichen das ich zB zur zeit für dieses Projekt viel in den einzelnen Programmordnern hin und her Springe - aber
    die dann jedesmal als shortcut zu belegen... das hab ich früher schon nicht so gemacht und werd es wohl in zukunft auch nicht so nutzen.

    aber die idee mit dem Fenster find ich bisher klasse.

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

    • Offizieller Beitrag

    Antwort auf Dein Edit in Post #5.
    Habe noch ein paar Änderungen vorgenommen. Jetzt bleiben die Einträge bestehen, auch wenn man das Explorerfenster schließt und es öffnet sich ein Explorerfenster (wenn keins offen ist) bei einem Klick auf einen Eintrag.

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <ListBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    Global Const $WS_EX_COMPOSITED = 0x02000000 ; Windows XP: Paints all descendants of a window in bottom-to-top painting order using double-buffering.
    $hGui = GUICreate('Liste der zuletzt benutzten Verzeichnisse', 300, 430, @DesktopWidth-306, 0, BitOR($WS_SYSMENU, $WS_SIZEBOX), $WS_EX_COMPOSITED)
    $hList = GUICtrlCreateList('', 5, 5, 290, 355, BitOr($GUI_SS_DEFAULT_LIST, $LBS_NOTIFY))
    GUICtrlSetResizing(-1, $GUI_DOCKBORDERS)
    $hClear = GUICtrlCreateButton('Liste löschen', 110, 365, 80, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKHCENTER+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE)
    GUISetState()
    WinSetOnTop($hGui, '', 1)
    Global $sPath, $sOldPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hList
    $sPath = GUICtrlRead($hList)
    If $sPath <> '' Then
    If ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1') = '' Then
    ShellExecute('explorer.exe', $sPath)
    Else
    ControlSetText('[CLASS:CabinetWClass]', '', 'Edit1', $sPath, 1)
    ControlSend('[CLASS:CabinetWClass]', '', 'Edit1', '{ENTER}')
    EndIf
    EndIf
    Case $hClear
    GUICtrlSetData($hList, '')
    EndSwitch
    $sPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    If $sPath <> $sOldPath Then
    $sOldPath = $sPath
    If $sPath <> '' Then GUICtrlSetData($hList, $sPath)
    EndIf
    WEnd

    [/autoit]
  • es ist vielleicht komplett überflüssig, (außer für mein ego dem ich auch mal beweißen muss, das ich was drauf hab)
    also ich hab das script jetzt noch etwas abgeändert - für mich wars ein halber Tag arbeit - für andere sicher 5 minuten. und vermutlich hab ichs auch total umständlich gemacht.

    also ich hab jetzt noch 2 buttons eingefügt und die Liste wird jetzt (auf wunsch) bis zur nächsten Benutzung gespeichert (dafür wird ne ini angelegt) (die eigentlich zwar immer da ist, aber das ist ja egal)
    dann hab ich das Fenster transparent gemacht und die Position geändert.

    jetzt mach ich noch ein neues icon für den infobereich der Taskleiste und lösch den Eintrag in der normalen Leiste. und dann ist es perfekt
    (und was mir noch aufgefallen ist: wenn ich das Fenster breit ziehe, verhalten sie die Buttons doch recht merkwürdig. - aber ist egal lass ich jetzt so)

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <ListBoxConstants.au3>
    #include <GUIConstantsEx.au3>
    Global Const $WS_EX_COMPOSITED = 0x02000000 ; w
    $hGui = GUICreate('letzte offene Verzeichnisse', 200, 430, @DesktopWidth-206, 710, BitOR($WS_SYSMENU, $WS_SIZEBOX), $WS_EX_COMPOSITED)
    $hList = GUICtrlCreateList('', 5, 5, 290, 355, BitOr($GUI_SS_DEFAULT_LIST, $LBS_NOTIFY))
    $iniVar = 0 ;für die ini Datei
    $hClear = GUICtrlCreateButton('Liste löschen', 5, 350, 80, 25)
    $hexit = GUICtrlCreateButton('Beenden', 100, 350, 80, 25)
    $hsaveAndExit = GUICtrlCreateButton('Liste Speichern und Beenden', 5, 380, 175, 25)
    GUICtrlSetResizing(-1, $GUI_DOCKHCENTER+$GUI_DOCKBOTTOM+$GUI_DOCKSIZE)
    GUISetState()
    WinSetOnTop($hGui, '', 1)
    WinSetTrans("letzte offene Verzeichnisse", "", 185) ; Macht das fenster transparent
    Global $sPath, $sOldPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')

    [/autoit] [autoit][/autoit] [autoit]

    ;alte Pfade einles
    $completeIni = IniReadSection("explorer Pfade.ini", "Pfade")
    if @error then
    else
    For $i = 1 To $completeIni[0][0]
    GUICtrlSetData($hList, $completeIni[$i][1])
    Next
    endif

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    IniDelete("explorer Pfade.ini", "Pfade")
    exit
    Case $hList
    $sPath = GUICtrlRead($hList)
    If $sPath <> '' Then
    If ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1') = '' Then ;link öffnen
    ShellExecute('explorer.exe', $sPath)
    Else
    ControlSetText('[CLASS:CabinetWClass]', '', 'Edit1', $sPath, 1)
    ControlSend('[CLASS:CabinetWClass]', '', 'Edit1', '{ENTER}')
    EndIf
    EndIf
    Case $hClear ;button liste löschen
    GUICtrlSetData($hList, '')
    IniDelete("explorer Pfade.ini", "Pfade")
    Case $hexit ;button beenden
    IniDelete("explorer Pfade.ini", "Pfade")
    exit
    Case $hsaveAndExit ;save & exit (gespeichert wird ja jeder neue Pfad sofort)
    exit
    EndSwitch
    $sPath = ControlGetText('[CLASS:CabinetWClass]', '', 'Edit1')
    If $sPath <> $sOldPath Then
    $sOldPath = $sPath
    $iniVar = $iniVar +1 ;neuer Wert für die Ini Datei
    IniWrite("explorer Pfade.ini", "Pfade",$iniVar, $sPath) ;meines
    If $sPath <> '' Then GUICtrlSetData($hList, $sOldPath)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit]

    super projekt für nen noob wie mich :P

    Für Rechtschreibfehler gibt es keinen Finderlohn!!

    • Offizieller Beitrag

    Das speichern funz aber nicht. Wenn du die Gui per Beenden Button oder das X im Fenster schließt wird die INI Section Pfade gelöscht .

    Edit: fuzt doch hab mich verlesen .