Hola Lepuke.
No dispongo de Windows XP para probarlo, pero podrías intentar de este modo:
Código Delphi
[-]
...
uses ShellApi;
const
MSGFLT_ADD = 1;
var
ChangeWindowMessageFilter: function (msg: Cardinal; dwFlag : Word):BOOL; stdcall;
procedure TForm1.DragDropFiles(var Msg: TMessage);
var
Cont,i : integer;
FName : array [0..MAX_COMPUTERNAME_LENGTH+MAX_PATH] of char;
begin
Cont:= DragQueryFile(Msg.WParam, $FFFFFFFF, FName, 255)-1;
if (Win32MajorVersion = 6)and(Win32MinorVersion > 0) then
for i:= 0 to Cont do ChangeWindowMessageFilter (i, MSGFLT_ADD);
for i := 0 to Cont do
begin
DragQueryFile(Msg.WParam, i, FName, 255);
ListBox1.Items.Add(FName);
end;
DragFinish(msg.WParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if (Win32MajorVersion = 6)and(Win32MinorVersion > 0) then
begin
@ChangeWindowMessageFilter:= GetProcAddress(LoadLibrary('user32.dll'),'ChangeWindowMessageFilter');
if Assigned (ChangeWindowMessageFilter) then
begin
ChangeWindowMessageFilter (WM_DROPFILES, MSGFLT_ADD);
ChangeWindowMessageFilter (WM_COPYDATA, MSGFLT_ADD);
ChangeWindowMessageFilter ($0049, MSGFLT_ADD);
end;
end;
DragAcceptFiles(Handle, True);
ListBox1.Items.Clear;
end;
Saludos