Делаю выборку форматов, и если попадается CF_HDROP пытаюсь забрать из него список файлов.
Получаю либо какой то мусор, либо строку, обрезанную слева.
Утилиты для просмотра содержимого буфера обмена показывают все правильно.
Что я делаю не так?
uses ShlObj, Clipbrd;
function TForm2.Get_ClipboardFiles: String;
var
len, fmt: integer;
tmp: array of Byte;
Data: THandle;
DataPtr: Pointer;
DataLen: integer;
pFormatName: String;
sTmp: WideString;
begin
Result := '';
Clipboard.Open;
try
fmt := EnumClipboardFormats(0);
while (fmt > 0) do
begin
Data := GetClipboardData(fmt);
if Data <> 0 then
begin
DataPtr := GlobalLock(Data);
if DataPtr <> nil then
try
DataLen := GlobalSize(Data);
if DataLen > 0 then
begin
SetLength(pFormatName, 255);
len := GetClipboardFormatName(fmt, @pFormatName[1], 255);
SetLength(pFormatName, len);
if fmt = CF_HDROP then
SetString(Result, PFileGroupDescriptor(DataPtr)^.fgd[0].cFileName, Length(PFileGroupDescriptor(DataPtr)^.fgd[0].cFileName));
end;
finally
GlobalUnlock(Data);
end;
end;
fmt := EnumClipboardFormats(fmt);
end;
finally
Clipboard.Close;
end;
end;