Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Explorer.EXE erzeugen und auf eigene Form verankern (https://www.delphipraxis.net/29897-explorer-exe-erzeugen-und-auf-eigene-form-verankern.html)

APP 16. Sep 2004 09:54


Explorer.EXE erzeugen und auf eigene Form verankern
 
Hallo,
ich mochte eine Instanz des MS-Explorers erzeugen (mit createProcess oder ä.)
und diese dann in ein Panel oder eine Form einbetten.
Die Form soll sozusagen der Parent vom Explorer sein.

Ist das möglich?

Danke,
Armin

alcaeus 16. Sep 2004 09:56

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Hi Armin,

ich weiß nicht ob das möglich ist. Aber wenn du nicht nonVCL programmierst, solltest du dir die TShellListView und TShellTreeView Komponenten suchen. Diese "implementieren" ein Explorer-Fenster. Wenn ich mich nicht ganz täusche dann findest du die beiden Komponenten auf der Beispiele-Palette.

Greetz
alcaeus

APP 16. Sep 2004 10:33

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Hallo Andreas,
ich kenne diese Kompos, aber leider nach einem kurzen Test
bekam ich aus unbekannten Gründen immer eine Exception
die für mich nicht nachvollziehbar ist.

Daher möchte ich den "echten" Explorer benutzen.

[EDIT]
Habe gerade einen Patch gefunden: ...verhindern, dass es unter XP eine Zugriffsverletzung mit TListView gibt?

Ich möchte es aber trotzdem weiterhin mit dem "echten" Explorer versuchen :-)
[/EDIT]

PhilGo 16. Sep 2004 10:41

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Ich kenne jemanden der das auch machen wollte, aber dann mit der Zeit festgestellt hat, das wo was nicht möglich ist. So war jedenfalls seine Meinung


Gruß PhilGo

Bernhard Geyer 16. Sep 2004 10:52

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Oder einfach TWebBrowser nehmen:
Delphi-Quellcode:
WebBrowser.Navigate('C:\')
um den Inhalt des Laufwerks C anzusehen.
Und die Doppelklicks bekommst Du mittels OnBeforeNavigate2 auch mit (vermutlich auch noch ein paar andere Dinge).

writeln 16. Sep 2004 12:44

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Hiho!

Ich habe mit TShellTreeView & Co auch eher schlechte Erfahrungen gemacht (unter D6).
Besonders wenn man mehrere TShell- Objekte in einem Formular einsetzt, kracht es häufig mal.

Eine Alternative, mit der ich bisher ganz gut gefahren bin, sind die Hier im Forum suchenShellShock - Komponenten.
Sind zwar auch nicht mehr wirklich "state of the art", aber ganz brauchbar.

APP 16. Sep 2004 17:06

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Tja,
vielen Dank für die externen Kompos Leute,
aber die kenne ich alle schon und helfen mir nicht weiter.


Ich möchte bloß den MS-Explorer auf eine Delphi-Form "kleben". :wall:

toms 16. Sep 2004 17:09

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Starte z.B mit CreateProcess Explorer.Exe.
Dann suchst du mit der FindWindow API nach der "ExploreWClass" Klasse. (Aufpassen: Es könnten merhere Explorer Instanzen vorhanden sein)
Mit Windows.SetParent() kannst du dann das Explorer Fenster auf deine Form bringen.

APP 16. Sep 2004 17:25

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Hallo Toms,

so ähnlich habe ich mir das auch gedacht, aber
mit
Delphi-Quellcode:
Windows.SetParent()
setze ich den
Explorer als Parent von meiner Form (denke ich mal).

Ich möchte aber, dass die Form der Parent des Explorers ist. :gruebel:

APP 16. Sep 2004 20:16

Re: Explorer.EXE erzeugen und auf eigene Form verankern
 
Hallo Toms,
danke noch einmal für Deine Idee!

Da ich mehr gegoogelt habe um eine Lösung zu finden,
als mich Deinen Tips zu widmen hat es lange gedauert,
bis ich kapierte, dass eh alles unter meiner Nase ist! :wall:

Für Alle die es auch interessiert, ein kleines Q&D Beispiel:

Delphi-Quellcode:
PROCEDURE TForm1.Button1Click(Sender: TObject);
// Hierbei wird der Windows-Taschenrechner einem Panel als Childfenster zugeordnet
//
  FUNCTION GetHandleFromWindowTitle(TitleText: STRING): hWnd;
  VAR
    StrBuf                        : ARRAY[0..$FF] OF Char;
  BEGIN
    Result := FindWindow(PChar(0), StrPCopy(StrBuf, TitleText));
  END;

VAR
  aWindowH                        : hWnd;
BEGIN
  IF ShellExecute(0, 'open', 'calc.exe', NIL, NIL, SW_SHOW) > 32 THEN
    BEGIN
      // Warten, bis Rechner sichtbar ist
      Sleep(1000);
      aWindowH := GetHandleFromWindowTitle('Rechner');
      // Rechner in Panel einbetten
      Windows.SetParent(aWindowH, Panel1.Handle);
    END;
END;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz