Zitat:
FileIndex := $FFFF;
If the value of this parameter is 0xFFFFFFFF
Und es sollte erwähnt werden, daß Application.OnMessage überschrieben wird (falls dieses wer übersieht) und in seinem Programm selber dort schon etwas Anderes zugewiesen hat, bzw. noch zuweisen tut.
Delphi-Quellcode:
type
TForm1 = class(TForm)
procedure AppMessage(var Msg: TMsg; var Handled: Boolean);
end;
uses
ShellAPI;
procedure TForm1.AppMessage(var Msg: TMsg; var Handled: Boolean);
const
BufferLength = 255;
var
QtyDroppedFiles, FileIndex: Integer; // eigentlich Cardinal, aber für ein sicheres
// Beenden der For-Schleife, bei QtyDroppedFiles=0
pDroppedFilename: array[0..BufferLength] of Char;
begin
if Msg.message = WM_DROPFILES then
begin
QtyDroppedFiles := DragQueryFile(Msg.wParam, Cardinal(-1), nil, 0);
try
for FileIndex := 0 to QtyDroppedFiles - 1 do
begin
DragQueryFile(Msg.wParam, FileIndex, @pDroppedFilename, BufferLength);
if Msg.hwnd = Edit1.Handle then
Edit1.Text := PChar(@pDroppedFilename)
else if Msg.hwnd = Edit2.Handle then
Edit2.Text := PChar(@pDroppedFilename);
end;
finally
DragFinish(Msg.wParam);
Handled := True;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
DragAcceptFiles(Edit1.Handle, True);
DragAcceptFiles(Edit2.Handle, True);
Application.OnMessage := AppMessage;
end;
PS: bei Windows 7 und einer Anwendung mit Admin-Rechten geht dieses vom "normalen" Explorer nicht mehr.
Da man nur noch Messages zu Anwendungen mit gleichen oder geringeren Rechten verschicken darf,
also müßte da z.B. der Explorer auch mit Admin-Rechten gestartet sein.
PSS: mit "Explorer" ist übrigen vieles gemeint ... der Desktop, der Explorer, die Dateilisten von Open-/Savedialogen ... also alles worin sich ein Explorer versteckt oder welches die hierfür nötigen Messages/Speicherbereiche erstellt.
Ein Therapeut entspricht 1024 Gigapeut.