Clipboard - copiar uma lista de arquivos

Top  Previous  Next

procedure TMain1.CopyFilesToClipboard(FileList: string);

var

  DropFiles: PDropFiles;

  hGlobal: THandle;

  iLen: Integer;

begin

  iLen := Length(FileList) + 2;

  FileList := FileList + #0#0;

  hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_MOVEABLE or GMEM_ZEROINIT,

    SizeOf(TDropFiles) + iLen);

  if (hGlobal = 0) then

     begin

     raise Exception.Create('Could not allocate memory.');

     exit;

     end

  else

  begin

    DropFiles := GlobalLock(hGlobal);

    DropFiles^.pFiles := SizeOf(TDropFiles);

    Move(FileList[1], (PChar(DropFiles) + SizeOf(TDropFiles))^, iLen);

    GlobalUnlock(hGlobal);

    Clipboard.SetAsHandle(CF_HDROP, hGlobal);

  end;