Entwickler-Ecke
Sonstiges (Delphi) - Windows Ordner im aktuellen Verzeichnis öffnen
van Dyke - Mo 05.01.09 14:58
Titel: Windows Ordner im aktuellen Verzeichnis öffnen
Hallo,
ich würde gerne wissen wie man einen Ordner im aktuell geöffneten explorer öffnet. (in dem sich das Programm befindet)
Hintergrund:
Ich möchte eine exe Programmieren welche automatisch vom USB Stick startet wenn man auf dessen Dateiicon klickt um seine Dateien anzuzeigen (funktioniert wenn man die autorun.inf dementsprechend angepasst hat). Dieses Programm soll dann kurz prüfen ob der Rechner dem Besitzer des USB Sticks gehört und darauf soll das Programm halt den root des USB Sticks anzeigen. Wenn es sich nicht um den Besitzer handelt wird noch eine Meldung ausgegeben.
Also eigentlich hanz einfach, nur das ich schon Stunden damit verbracht habe nach meinem Problem zu googlen. Ich finde leider nur Möglichkeiten ein neues Explorerfenster zu starten. z.B. mit ShellExecute
Dann habe ich noch überlegt es so zu machen dass man die tastatureingaben sendet ([alt]+S+currentdir+enter) aber damit komme ich leider gar nicht klar. ich habe es ledeglich geschafft ein vbs script für das senden zu schreiben (Ich denke aber mal das das keine schöne Variante ist Tastatureingaben zu senden).
Ich möchte noch erwähnen das ich ein totaler Anfänger in Sachen Delphi bin und hoffe das mir jemand bei meinem Problem helfen kann.
bye
Bergmann89 - Mo 05.01.09 15:10
HI,
ShellExecute sollte da aber gehen, was hast du bis jetzt? Was kommt für'n Fehler?
Muss es der Explorer sein, oder reicht auch ein normales Fenster?
€:
so sollte das gehen:
Delphi-Quelltext
1:
| ShellExecute(Application.Handle,'open','C:\',nil,nil,SW_MAXIMIZE); |
MfG Bergmann.
jaenicke - Mo 05.01.09 15:13
Bergmann89 hat folgendes geschrieben : |
ShellExecute sollte da aber gehen, was hast du bis jetzt? |
ShellExecute ruft ein neues Fenster auf, es ändert nicht die Anzeige in einem bestehenden. Jedenfalls wüsste ich nicht wie. :nixweiss:
Das könnte via DDE gehen, falls der Explorer das unterstützt. Das ist zwar uralt, aber eine andere (saubere) Möglichkeit wüsste ich im Moment nicht.
Problem: Was wenn mehrere Instanzen offen sind? Zum Beispiel wenn Ordnerfenster in neuen Prozessen geöffnet werden wie bei mir? Hmmm...
Bergmann89 - Mo 05.01.09 15:17
achja, sry...
ich hab da ma was gemacht, habs aber leider nich mehr. Damit konnte man sich alle geöffneten Fenster anzeigen lassen und nach beliben beenden. Man kann sich ja das Explorerfenster raus suchen, es schließen und dann ein neues öffnen...weiß jetzt aber nich mehr wie das hieß!
MfG Bergmann.
jaenicke - Mo 05.01.09 15:30
Das hatte ich auch überlegt. Mit FindWindow z.B. oder EnumWindows o.ä. ginge das. Aber ob das so sinnvoll ist?
van Dyke - Mo 05.01.09 15:46
Danke ersmal für die schnellen antworten.
also scheint es gar nicht so einfach möglich zu sein.
Dann ist es vielleicht doch besser tastatureingaben an den Explorer zu schicken.
Eigentlich ist ja das ensprechende Explorerfenster automatisch im Vordergrund, da ja von dort aus das Programm gestartet wird, oder? Leider kann ich sowas nur im vbs.
Damit sendet man per vbs alt+s und nach einer kuzen pause den aktuellen programmpfad:
Set oShell = CreateObject("WScript.Shell")
Set sh = WScript.CreateObject("WScript.Shell")
sh.SendKeys "(%s)"
WScript.Sleep 50
sh.SendKeys oShell.CurrentDirectory & vbCr
Leider weiss ich nicht wie man das in Delphi umsetzen könnte, habe zwar eine Prozedur gefunden die es möglich macht Tasten zu senden, dann aber immer nur eine und z.b. nicht den gesamten Pfad. Außerdem finde ich, wie schon geschrieben, es keine gute alternative tasten zu senden, da dass ja schnell in die Hose geht wenn im gleichen moment ein anderes Fenster aktiv wird. Man müsste also die Eingaben direkt an dieses speziell schon offene Fenster senden, aber wie?
jaenicke - Mo 05.01.09 17:42
Sowas geht auch in Delphi, aber das von dir genannte Problem ist nur eines von vielen. Es ist eben auch keine saubere Lösung.
Was ich mich frage: Wenn ich im Explorer den Stick anklicke lande ich doch ohnehin im Rootverzeichnis. Was ist da noch zu machen?
Bergmann89 - Mo 05.01.09 18:00
Ich denk ma, er will sowas wie n Passwortschutz machen, das nur er an die Daten rann kommt?! Aber das würde dann dem Sinn eines Wechseldatenträgers wiedersprechen, wenn man ihn bloß am eigenen PC benutzen kann...
Timosch - Mo 05.01.09 18:12
Bergmann89 hat folgendes geschrieben : |
Ich denk ma, er will sowas wie n Passwortschutz machen, das nur er an die Daten rann kommt?! Aber das würde dann dem Sinn eines Wechseldatenträgers wiedersprechen, wenn man ihn bloß am eigenen PC benutzen kann... |
...und lässt sich umgehen (Shift gedrückt halten oder Autorun deaktivieren).
van Dyke - Mo 05.01.09 19:01
jaenicke hat folgendes geschrieben : |
Sowas geht auch in Delphi, aber das von dir genannte Problem ist nur eines von vielen. Es ist eben auch keine saubere Lösung.
Was ich mich frage: Wenn ich im Explorer den Stick anklicke lande ich doch ohnehin im Rootverzeichnis. Was ist da noch zu machen? |
wenn man in der autorun.inf einen entsprechenden eintrag macht (shell\open\command=open.exe) kann man damit beim anklicken des laufwerks im dateiexplorer (nicht im explorer) ein programm starten lassen. dabei wird aber der ordner nicht angezeigt, das müsste dann also das programm übernehmen.
edit:
passwortschutz soll es nicht werden. es soll lediglich eine meldung ausgegeben werden wenn es sich um einen "fremden" rechner handelt, danach soll der ordner ganz normal geöffnet werden. das wäre dann sinnvoll wenn man z.b. seinen usb stick verliert. dann kann man ja seine telefonnummer in der meldung angeben.
van Dyke - Di 06.01.09 00:18
hallo,
ich habe jetzt mal das bis jetzt fertige Programm angehangen, damit ihr genau wisst was ich meine.
Die Open.exe und autorun.inf ist in den Root eines USB Sticks zu entpacken, beim nächsten anschliessen am PC (Windows XP) sollte beim klick auf das Laufwerk im Dateiexplorer eine Meldung kommen und darauf der Ordner geöffnet werden (allerdings halt im neuen Fenster).
Das Programm wird in der autorun.inf mit dem Parameter -o aufgerufen.
Es lässt sich auch konfigurieren indem man es direkt ohne Parameter startet.
van Dyke - Di 06.01.09 15:59
So leute,
ich habe es ENDLICH geschafft... nach weiterer googellei habe ich dann ein Super Programm namens Winspy gefunden ->
http://www.delphipraxis.net/topic17426,0,asc,0.html
dieses findet den namen der felder von windows fenstern und erzeugte sogar schon fast den gesamten code den ich barauchte.
Ich benötigte dann nur noch folgende befehle:
Delphi-Quelltext
1: 2: 3:
| SetWinText(wndChild, RootFolder); PostMessage(wndChild, WM_KEYDOWN, VK_RETURN, 0); PostMessage(wndChild, WM_KEYUP, VK_RETURN, 0); |
um den pfad und ein RETURN zu senden.
Falls jemand interesse hat biete ich das Programm hier an.
-Normal starten um Einstellungen vorzunehmen.
-Mit Parameter "-o" starten (siehe autorun.inf) um den besagten "Check" durchzuführen und den root anzuzeigen.
-Mit Parameter "-s "Pfad\Dateiname.exe"" starten um nach dem Check ein Proiramm zu starten
Die autostartfunktion funktioniert allerding leider nur wenn man das Laufwerk über den Dateiexplorer startet (also das rechte Fenster im Explorer oder über den Arbeitsplatz)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!