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
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
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
Hallo Hilbi,
die Datei sollte ja auch, mit dem FileOpenDialog ausgewählt werden.
Herzliche Grüße
Lars
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.
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
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
Such mal nach ClipBoardChain (das ist die bessere Lösung anstatt einen Timer zu benutzen).
@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