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