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 Drag and drop a file programmatically by using "OleDropTargetInterface" (https://www.delphipraxis.net/210850-drag-drop-file-programmatically-using-oledroptargetinterface.html)

chg 21. Jun 2022 20:09

Drag and drop a file programmatically by using "OleDropTargetInterface"
 
Liste der Anhänge anzeigen (Anzahl: 2)
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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