Certa vez em uma postagem, um colega perguntou-me como obter o path do arquivo que estava na área de transferência, respondi à ele que ao meu ver isto era impossível de se realizar, porém pesquisaria melhor sobre o assunto e lhe daria uma resposta mais exata. Mas depois de averiguar, vi que estava errado. Espero que esse artigo ajude esse colega, e vários outros que precisam do path do arquivo que esteja na área de transferência.

Este exemplo demonstra como extrair os nomes de arquivos "caminho completo" da área de transferência. Então vamos criar um novo projeto VCL e vamos inserir um componente TMemo ( Memo1 ) e um TButton ( Button1 ). Não se esqueça de declarar na seção Uses a classe "Clipboard" e "ShellAPI". Veja a imagem de nosso projeto na figura abaixo:

Layout do projeto

Figura 1: Layout do projeto

Temos agora que codificar o OnClick do botão para quando clicarmos nele, seja fornecida a lista de arquivos que estão na área de transferência.

Listagem 1: No Evento OnClick do Button1 digite o seguinte código


procedure TForm1.Button1Click(Sender: TObject);
var
  f: THandle;
  buffer: Array [0 .. MAX_PATH] of Char;
  i, numFiles: Integer;
begin
  Clipboard.Open;
  try
    f := Clipboard.GetAsHandle(CF_HDROP);
    If f <> 0 Then
    begin
      numFiles := DragQueryFile(f, $FFFFFFFF, nil, 0);
      Memo1.Clear;
      for i := 0 to numFiles - 1 do
      begin
        buffer[0] := #0;
        DragQueryFile(f, i, buffer, sizeof(buffer));
        Memo1.Lines.Add(buffer);
      end;
    end;
  finally
    Clipboard.Close;
  end;
end;

Selecione os arquivos que desejas, copiar no Windows Explorer, Windows, e então pressione o botão "Button1" de sua aplicação. Uma lista de arquivos selecionados para copiar será exibido no componente "TMemo".

Espero que tenham gostado, e que os códigos e dicas tenham facilitado o trabalho e estudo de vocês.

Muito obrigado. Fico por aqui, e espero por vocês na próxima! Grande abraço.