Vielleicht solltest Du da auch Widefunktionen verwenden. Ich habe das mal so gemacht:
Delphi-Quellcode:
procedure T***.WMDROPFILES(var Msg: TMessage);
var
pDragFile : PWideChar;
iFileCount : integer;
i, iSize : integer;
slDropList : TStringList;
begin
{
* Initialisierung.
}
pDragFile := nil;
slDropList := TStringList.Create;
{
* Anzahl der Dropfiles holen.
}
iFileCount := DragQueryFileW(Msg.wParam, $FFFFFFFF, pDragFile, 255);
{
* Wenn Einträge existieren, Liste abarbeiten.
}
if iFileCount > 0 then
for i := 0 to iFileCount - 1 do
begin
{
* Die Länge des Eintrages ermitteln.
}
iSize := DragQueryFile(Msg.wParam, i, nil, 0) + 1;
{
* Den speicher für den String bereitstellen.
}
pDragFile := WideStrAlloc(iSize);
{
* Den Eintrag holen.
}
DragQueryFileW(Msg.wParam, i, pDragFile, iSize);
{
* Den Eintrag in die Liste eintragen.
}
slDropList.Add(pDragFile);
{
* Den reservierten Speicher freigeben.
}
WideStrDispose(pDragFile);
end;
{
* Messagebehandlung beenden.
}
DragFinish(Msg.wParam);
...
end;
slDropList müsste vermutlich TWideStringList sein. Ist es hier nicht, weil ich den TNT Hack von Himitsu verwende.
Für das ExtractFileExt könnte man auch eine Kopierfunktion verwenden.