Einzelnen Beitrag anzeigen

chg

Registriert seit: 5. Nov 2011
1 Beiträge
 
#1

Drag and drop a file programmatically by using "OleDropTargetInterface"

  Alt 21. Jun 2022, 20:09
Hallo

Mittels IDropTarget soll eine WAV-Datei aus einem Delphi-Programm mittels Drag-and-Drop in eine Fremdanwendung (z.B. in Spek.exe, von http://spek.cc) "geschickt" werden.
Dies soll aber nicht durch Mausinteraktion des Benutzers erfolgen, sondern "programmatisch" durch das Delphi-Programm unter Verwendung des "OleDropTargetInterface".

Im folgenden Link fand ich einen Ansatz dazu (drag and drop a file programmatically by using "OleDropTargetInterface"):
http://www.codenewsfast.com/cnf/arti...rt-ng1913q4204

Mit Delphi 7 versuchte ich, dies nachzubauen (siehe angehängte ZIP-Datei), erhielt aber eine EAccessViolation:
Delphi-Quellcode:
var
  DT: IDropTarget;
begin
  DT := IDropTarget(GetProp(hWnd, 'OleDropTargetInterface')); // --> EAccessViolation..............
  ...
end;
"hWnd" ist das Window-Handle vom DropTarget im Fremdprogramm (Spek.exe), das ich mit WinSpy herausgesucht habe und mit FindWindow und FindWindowEx zur Laufzeit korrekt auslesen kann. Am Window-Handle sollte es nicht liegen... - siehe angehängtes Bild "hWnd DropTarget.PNG")

Komisch erscheint mir, dass die Funktion GetProp ein Handle zurückgibt, und dies ohne Compiler-Fehler an das DropTarget "DT" übergeben werden kann - dann erzeugt aber diese Zeile die EAccessViolation zur Laufzeit.
Danach versuchte ich es noch im obigen Code anstelle "GetProp" mit der Funktion "GetInterfaceProp" - das schluckt aber der Compiler nicht.


Weiter versuchte ich es auf die folgende Weise, erhielt dann aber zur Laufzeit "EOleSysError - The parameter is incorrect":
Delphi-Quellcode:
var
  DT: IDropTarget;
begin
  OleCheck(CoCreateInstance(DTguid, // Drop Target-GUID (CLSID)
                            nil,
                            GetProp(hWnd, 'OleDropTargetInterface')
                            IDropTarget,
                            DT));
                            // --> EOleSysError : The parameter is incorrect
  ...
end;

  • Hat jemand eine Idee, woran es liegt?

Im folgenden Link fand ich ein funktionierendes "OleDropTargetInterface"-Beispiel, das aber in der Skript-Sprache AutoHotKey (AHK) geschrieben ist:
https://www.autohotkey.com/boards/viewtopic.php?t=56720
Hier erfolgt die Verknüpfung des "OleDropTargetInterface" mit dem IDropTarget auf andere Weise als in den ersten beiden Ansätzen - mit QueryInterface (Zeilen 90 und 107 im AHK-Script-Code).
  • Hat jemand eine Idee, wie man insbesondere die Zeilen 90 und 107 (im AHK-Script-Code) in Delphi implementieren könnte?

Vielen Dank für Tipps.

Grüsse
chg
Miniaturansicht angehängter Grafiken
hwnd-droptarget.png  
Angehängte Dateien
Dateityp: zip 001.zip (311,1 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat