Laden...

Aus eigenem Prozess Daten aus dem Windowsexplorer erfragen

Erstellt von hilbi vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.922 Views
hilbi Themenstarter:in
8 Beiträge seit 2008
vor 14 Jahren
Aus eigenem Prozess Daten aus dem Windowsexplorer erfragen

Hallo erst mal,
ich will mit meiner anwendung die momentan selektierten Datein aus dem Windows Explorer abfragen. Meine Anwendung läuft im tray und reagiert auf global hotkey. Ich habe auch schon das Handle explorers mit


[DllImport("user32.dll")]
public  static extern IntPtr  GetForegroundWindow();

erhalten. Jedoch kann ich daraus keine Instance von Form mit


Form.FromHandle(handle);

basteln, um anschließend dann die selektierten Dateien auszulesen.
Hat jemand eine idee wie ich entweder an eine Form-Instance käme oder wie ich das anders angehen könnte, ohne mir selber einen "Explorer" basteln zu müssen?

MfG hilbi

2.223 Beiträge seit 2005
vor 14 Jahren

Hallo hilbi,

Du wirst das Explorer Fenster auch niemals als Form Casten können

wenn du das ganze wirklich machen möchtest, dann kommst du nicht drum herrum alles mit PInvoke zu machen.

Warum nimmst du denn nicht zb einen FileÖffnen dialog?

Herzliche Grüße
Lars

hilbi Themenstarter:in
8 Beiträge seit 2008
vor 14 Jahren

ein FileOpen bringt mir in diesem Schritt leider noch nichts weil ich ja nicht weis welche datei ich im browser selektiert habe.
Erst wenn ich sie selektiert habe möchte ich meinen Hotkey verwenden um eine Funktion auf die Datei ausüben zu können.

auf
http://www.pinvoke.net/
war ich auch bereits. Vermute auch das dort irgend wo die Lösung zu finden ist, aber ich habe sie leider nicht in der menge von funktionen finden können.

MfG hilbi

2.223 Beiträge seit 2005
vor 14 Jahren

Hallo Hilbi,

die Datei sollte ja auch, mit dem FileOpenDialog ausgewählt werden.

Herzliche Grüße
Lars

F
240 Beiträge seit 2006
vor 14 Jahren

Das würde wohl gegen sein Konzept gehen Lars.

Aber warum Globaler Hotkey? Ginge nicht auch einfach ne Shellerweiterung (wie zb. Winamp es macht), dann gäbe es das Problem mit der Selektion garnicht.

2.223 Beiträge seit 2005
vor 14 Jahren

Hallo Femaref,

eine Shell Erweiterung wäre bestimmt eine schöne Sache, solange diese Erweiterung nicht in .Net Programmiert wird.

Zu näheren Infos Don't do Shell Extension Handlers in .NET
oder mal die Foren Suche

Herzliche Grüße
Lars

hilbi Themenstarter:in
8 Beiträge seit 2008
vor 14 Jahren

wow schon mal vielen dank fürs Interesse ...

@Lars Schmitt: ein fileopen würde leider wirklich gegen das Konzept verstoßen
@Femaref: daüber hatte ich auch schon einiges gelesen, und es wäre auch eine alternative, jedoch würde es den Wokflow doch arg einschränken

vielleicht noch mal etwas genauer was ich übrhaupt vor habe:
mich stört bei Windows das ich, wenn ich verschiedene Kopiervorgänge habe das windows diese parallel ausführt, was natürlich die Geschwindigkeit arg reduziert. wenn ich zb 2 große datein auf einen usb stick verschiebe und den nach der halben Gesamtdauer herausziehe habe ich quasi 2 halbe Datien auf dem Stick, nicht jedoch wenn ich sie nacheinander kopiere, dann hätt ich eine ganze...
soll also heißen das ich ein pendangt zu strg+c; strg+v selber schreiben möchte.
nun wird sicherlich der Einwand kommen das ich einen anderen Explorer wie zb StarCommander nehmen soll, aber dabei lernt man ja nichts und der ist ja leider auch unabhängig. Desweiteren könnte ich so gleich noch ein paar andere Features einbauen die mir so vorschweben ...

mir fällt gerade ein das es da mal ein anderes programm zur besseren verwaltung der Zwischenablage gab, vielleicht finde ich dahingehend ja etwas

Falls jetzt die Idee kommt die Zwischenablage direkt zu benutzen ^^:
Ich habe schon einmal versucht direkt strg+c abzufangen und darauf zu reagieren in dem ich Clipboard auslese. Jedoch wurde teilweise meine Programm aufgerufen bevor die Selectierten Dateien im Clipboard landeten. Dies könnte man sicherlich mit einem Timer regulieren, aber ob das eine schone lösung ist bezweifle ich ^^

MfG hilbi

4.942 Beiträge seit 2008
vor 14 Jahren

Such mal nach ClipBoardChain (das ist die bessere Lösung anstatt einen Timer zu benutzen).

hilbi Themenstarter:in
8 Beiträge seit 2008
vor 14 Jahren

@Th69: vielen lieben Dank. Deine Idee hat mich ein großes stück weiter gebracht...

vielleicht mal für alle:
mit ClipBoardChain kann man sich an die Zwischenspeicherevents ranhängen, und daduch dann auch auslesen, ich habe es nun mal mit texten probiert, wie auch mit absoluten Pfaden, geht beides
im internet gibt es dafür haufenweise anleitungen ...

Ich denke zwar nun ClipBoardChain nicht zu brauchen, aber es mich auf die richtige Fährte gebracht, denn mit


IDataObject iData = new DataObject();  
iData = Clipboard.GetDataObject();
object ob = iData.GetData(DataFormats.FileDrop);

komme ich nun an meine heiß begehrten Dateipfade.

das einzige was nun noch zu meinem Glück fehlt ist die fähigkeit mich an einen globalen Hotkey von windows ranzuhängen (strg+c). Dies ist mir zwar schon gelungen, aber scheinbar habe ich ihn dabei überschrieben. Wenn mein event jedoch ausgelööst würde wenn strg+c fertig mit der zwischenspeicheroperation ist dürfte ich dies auslesen können und dann damit weiterarbeiten können ...

MfG hilbi