Entwickler-Ecke

Windows API - Ziel suchen


Heiko - So 24.07.05 16:47
Titel: Ziel suchen
Wie kann man einen Ordner öffnen und dabei gleich eine Datei anwählen ohne die zu öffnen? Bei ShellExecute scheint es nicht zu gehen, oder etwa doch?


Moderiert von user profile iconChristian S.: Topic aus CLX / Delphi Language (Object-Pascal) verschoben am So 24.07.2005 um 19:37


hallo - So 24.07.05 16:53

Was meinst du mit anwählen? Focus drauf setzen?


Heiko - So 24.07.05 16:57

Ja


retnyg - So 24.07.05 17:15

mit shellexecute den ordner öffnen und den dateinamen der ausgewählt werden soll per sendkeys an das neue fenster schicken
dann markiert der explorer die datei automatisch

ne sendkeys unit findest du im Suche in: Delphi-Forum, Delphi-Library SMILEMASTER 2005 source


Heiko - So 24.07.05 18:37

Ich habe es jetzt so:


Delphi-Quelltext
1:
2:
3:
4:
5:
var h: hwnd;
begin
 h:=ShellExecute(Form1.Handle, 'explore'nilnil, PChar(ExtractFileDir(Form1.SpeicherortEdit.Text)), SHOW_OPENWINDOW);
 sendmessage(h,WM_SETFOCUS,0,0); //dürfte sogar unnötig sein, da es automatisch den focus bekommen müsste
 keysend.SendKeys(Form1.SpeicherortEdit.Text);


Allerdings funktioniert das nicht. Was muss ich noch machen?


retnyg - So 24.07.05 19:35


Delphi-Quelltext
1:
keysend.SendKeys(extractfilename(Form1.SpeicherortEdit.Text));                    

statt 'explore' kannste auch mal 'open' versuchen
und statt WM_SETFOCUS evtl setforegroundwindow


Heiko - So 24.07.05 20:41

Also so hier:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.ZielSuchenButtonClick(Sender: TObject);
var h: hwnd;
begin
 h:=ShellExecute(Form1.Handle, 'open'nilnil, PChar(ExtractFileDir(Form1.SpeicherortEdit.Text)), SHOW_OPENWINDOW);
 sendmessage(h,WM_SETFOCUS,0,0);
 keysend.SendKeys(ExtractFileName(Form1.SpeicherortEdit.Text));
end;


Wie du das mit setforegroundwindow weiß ich allerdings nicht, denn das anstatt WM_SETFOCUS funktioniert nicht, das Delphi da rummeckert.


Heiko - Fr 29.07.05 15:46

Oder funktioniert das vlt. auch irgendwie mit Parametern bei ShellExecute?


retnyg - Fr 29.07.05 16:56

user profile iconHeiko hat folgendes geschrieben:
Also so hier:
ja.
user profile iconHeiko hat folgendes geschrieben:
Oder funktioniert das vlt. auch irgendwie mit Parametern bei ShellExecute?
nein.


Lannes - Fr 29.07.05 23:34

Hallo,

wenn ich das richtig verstanden habe, willst Du den Explorer starten und eine Datei soll entsprechend deiner Vorgabe markiert sein.
z.B.

Delphi-Quelltext
1:
2:
3:
4:
var Datei : String;
begin
  Datei := 'C:\Temp\DieseDateiMarkieren.txt';
  ShellExecute(Form1.Handle, 'open','explorer.exe',Pchar('/e,/select,'+Datei), '', SW_SHOWNORMAL);


Heiko - So 31.07.05 14:42

thx, das funktioniert so wie ich es will.

Allerdings würde mich noch interessieren, was das /e bei den Parametern bedeutet (/select ist ja das selektieren bestimmt).


Sprint - So 31.07.05 14:54

user profile iconHeiko hat folgendes geschrieben:
Allerdings würde mich noch interessieren, was das /e bei den Parametern bedeutet (/select ist ja das selektieren bestimmt).

Auszug aus der Datei TIPS.TXT (Microsoft Windows 98SE):
Zitat:
Schalter für den Windows-Explorer
---------------------------------

Schalter für den Windows-Explorer sind nützlich beim Erstellen von
Ordnern, die als Stammverzeichnis dienen sollen:

Explorer [/e,][/root,<objekt>,] [[<ordner>]| [/select,
<unterobjekt>]]

/e Explorer-Ansicht verwenden (Ansicht "Alle Ordner" in
der Explorerleiste).
Standardeinstellung ist Ansicht "Keine" in der
Explorerleiste.

/root,<objekt> Geben Sie das Objekt im "normalen" Namespace an,
das als Stammverzeichnis (oberste Ebene) für den
Windows-Explorer dient. Standardeinstellung ist der
Ordner Desktop.

/select Der übergeordnete Ordner wird geöffnet, und das
angegebene Objekt wird ausgewählt.

<unterobjekt> Der Ordner oder die Datei, der bzw. die im Windows-
Explorer geöffnet wird. Wenn der Schalter /select
verwendet wird, ist das Unterobjekt hervorgehoben.
Andernfalls wird der Ordner oder die Datei im Explorer
geöffnet. Standardeinstellung ist root<objekt>.

Beispiele: Explorer /e, /root, \\Berichte
Öffnet ein Explorer-Fenster in \\Berichte.

Explorer /select, C:\Windows\Calc.exe
Öffnet einen Ordner in C:\Windows (oder aktiviert einen
Ordner, der gegenwärtig geöffnet ist) und wählt Calc.exe
aus.

Explorer /e, /root,
\Source\Intern\Design\Benutzer\Thomas\Archiv
Öffnet im angegebenen Archivordner einen Ordner. Dies
ist eine gute Methode, einen dedizierten Remote-
Archivordner für Dokumente zu erstellen. Dadurch können
Sie eine Verknüpfung zu den Ordnern
\\Source\Intern\Design\Benutzer\Thomas\Archiv in den
Ordner SendTo platzieren und so Dokumente rasch
übertragen.


Heiko - So 31.07.05 15:59

k, thx Sprint

Die Datei existiert nicht unter XP. Ich habe gerade die gesamte Festplatte durchsuchen lassen ohne Erfolg.


Sprint - So 31.07.05 16:13

Ich weiß. Darum habe ich auch Windows 98 SE dahinter geschrieben.


Heiko - Do 11.05.06 17:03

Mhm, ich wollte jetzt bei dem Problem auch Multiselect einführen. Nur irgendwie bekomme ich das nicht gebacken, dass er mehr als eine Datei markiert.

Ich habs bisher auf folgende 2 Varianten probiert, die beide nicht funktionieren :(:

Delphi-Quelltext
1:
2:
  ShellExecute(Handle, 'open','explorer.exe', PChar('/e,/select,' +
    'C:\flashplayer.xpt,C:\PDOXUSRS.NET'), nil , SW_SHOWNORMAL);


Delphi-Quelltext
1:
2:
  ShellExecute(Handle, 'open','explorer.exe', PChar('/e,/select,' +
    'C:\flashplayer.xpt,/select,C:\PDOXUSRS.NET'), nil , SW_SHOWNORMAL);


Und mit Leerzeichen, statt dem Komma, zw. den Pfaden nimmt er auch nicht an :(.