![]() |
Datei mit laufendem Programm öffnen!
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich versuche im Moment ein Programm zu schreiben, mit dessen Hilfe ich eine Datei aus dem Explorer in einem bereits laufendem Programm öffnen kann. Ich habe es schon mit ShellExecute versucht, doch dann wird das Programm immer neu gestartet. Eine weitere Möglichkeit wäre vllt. Drag and Drop. Man müsste simulieren dass die Datei in das Programm "gedropped" wird. Jedoch unterstützt das Programm zwei Arten Drag and Drop, je nachdem wo im Interface die Datei "gedropped" wird. Wie man das umsetzen könnte, habe ich bis jetzt noch nicht herausgefunden. Ich habe es lediglich geschafft, den THandle des Programmes zu finden. Vielleicht kennt ihr auch eine ganz andere, viel einfachere Möglichkeit. Vielen Dank für jegliche Hilfe! BurtaN |
Re: Datei mit laufendem Programm öffnen!
Erstmal :hello: und herzlich willkommen :dp:.
Hab ich das richtig verstanden? Du schreibst ein Programm A, damit du eine Datei X in Programm B öffnen/laden kannst? Wozu das? |
Re: Datei mit laufendem Programm öffnen!
Zitat:
![]() |
Re: Datei mit laufendem Programm öffnen!
Ja,es geht darum, dass ich das Programm zum Musik machen verwende und es leider keine Setlist unterstütz. Das heißt ich muss beim Songwechsel immer mit der Maus das nächste Stück suchen und laden. Wenn ich noch Midi implentieren könnte, bräuchte ich weder Maus noch Tastatur.
|
Re: Datei mit laufendem Programm öffnen!
es kommt beim drag & drop drauf an wie es implementiert ist. Wenn einfach nur auf wm_dropfiles reagiert wird genügt es wenn du die entsprechende Nachricht schickst.
|
Re: Datei mit laufendem Programm öffnen!
Delphi-Quellcode:
Habe den Code benutzt aus dem verlinkten Thread. Er Funktioniert, wenn ich z.B. Wordpad als Ziel nehme. Das Ergebnis ist das gleiche als wenn ich die Datei mit dem Wordpad öffne, es funktioniert also. Falls ich es jedoch an mein Programm sende, passiert gar nichts. Ebenso passiert nichts, wenn ich eine Musik-File an Windows Media Player sende. Liegt das dann an der Drag and Drop Implentierung vom jeweiligen Programm? Was wiederrum bedeuten würde, dass ich solange Drag and Drop Möglichkeiten testen müsste, bis ich die passende zur Implentierung gefunden habe?
function DropFilesOnWnd(AWnd: HWND; AFiles: String): Boolean; overload;
var LInfo: PDragInfoA; LRes: Boolean; LHGlobal: Cardinal; begin LRes := False; if copy(AFiles, length(AFiles), 1) <> #0 then AFiles := AFiles + #0; LHGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT, SizeOf(TDragInfoA) + length(AFiles) + 1); if LHGlobal <> 0 then begin LInfo := GlobalLock(LHGlobal); if LInfo <> nil then begin LInfo.uSize := SizeOf(TDragInfoA); Move(AFiles[1], PChar(Cardinal(LInfo) + LInfo.uSize)^, length(AFiles)); GlobalUnlock(LHGlobal); LRes := PostMessage(AWnd, WM_DROPFILES, LHGlobal, 0); end; if not(LRes) then GlobalFree(LHGlobal); end; result := LRes; end; function DropFilesOnWnd(AWnd: HWnd; AFiles: TStringlist): Boolean; overload; begin result := DropFilesOnWnd(AWnd, StringReplace(AFiles.Text, #13#10, #0, [rfReplaceAll])); end; Danke für die guten Tipps bis jetzt! |
Re: Datei mit laufendem Programm öffnen!
Zitat:
Zitat:
|
Re: Datei mit laufendem Programm öffnen!
ungeachtet der Methode...
du sagtest doch, daß dieses Programm unterschiedliche Drop-Ziele hat ... also wirst du DropFilesOnWnd nicht an das Fenster senden müssen, sondern an das "Fenster", welches als Drop-Ziel definiert ist. (aber wenn diese Methode nicht unterstürtzt wird, dann wär das natürlich auch sinnlos) |
Re: Datei mit laufendem Programm öffnen!
Ich hatte per GW_HWNDNEXT alle Fenster durchgeschaltet und versucht das "richtige" Fenster zu finden. Das eigentliche Programm hat jedoch wieder nichts gemacht. Damit müsste ich doch das Fenster, welches für Drag and Drop zuständig ist, erwischt haben. Oder kann ich dadurch nciht alle Fenster "ausprobieren".
|
Re: Datei mit laufendem Programm öffnen!
Nimm doch zum Test einfach Winspector und lese das entsprechende Handle aus. GW_HWNDNEXT reicht IMHO nicht immer aus, GW_CHILD kann auch noch nötig sein, wenn das Fenster mehrere untergeordnete Fenster hat.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz