Segredos do WindowsO Windows Explorer não faz texto

Raymond Chen

Era uma vez o PowerToy Send To X. Ele permitia fazer coisas interessantes como selecionar diversos arquivos, clicar com o botão direito do mouse e selecionar Enviar para Área de Transferência como Nomes. Conforme esperado, isso copiava os nomes dos arquivos selecionados para a área de transferência.

Sem dúvida, era um PowerToy útil, mas por que ele foi criado em primeiro lugar? Por que não é possível simplesmente copiar os arquivos do Windows® Explorer e colá-los como texto para obter seus nomes? Melhor ainda, por que não é possível arrastar os arquivos do Windows Explorer e soltá-los no Bloco de Notas para obter seus nomes?

Nós tentamos, mas não funcionou.

A transferência de dados, quer por meio da área de transferência, quer pela ação de arrastar e soltar, é intermediada por objetos de dados OLE representados pela interface IDataObject. Um objeto de dados oferece vários formatos. Alguns formatos da área de transferência, incluindo texto e bitmaps, existem desde o início do Windows. Outros foram adicionados com o tempo. Embora os recursos de arrastar e soltar tenham surgido com o Windows, eles assumiram a forma de um HDROP. Você poderia passar isso para funções como DragQueryFile, por exemplo, a fim de extrair os nomes dos arquivos. Quando se copia algo do Windows Explorer para a área de transferência, o objeto de dados resultante oferece, entre outras coisas, o HDROP supramencionado, os conteúdos dos arquivos e um descritor de grupo de arquivos. Mas se existe um formato que não é oferecido pelo objeto de dados é o de texto.

Quando um destino da ação de soltar (um local em que é possível soltar os objetos) é informado de que um objeto de dados está sendo arrastado para ele ou será solto nele, ele pergunta a esse objeto: "O que é que você tem para mim?". O objeto de dados responde listando todos os formatos aos quais oferece suporte, em ordem de preferência decrescente. Em outras palavras, o primeiro formato retornado pelo objetos de dados é aquele que melhor o descreve. Em seguida, vem o segundo melhor formato, e assim por diante, até chegar ao último, que é apenas uma sombra do objeto original. Por exemplo, o objeto de dados que representa alguns objetos arrastados de uma janela do Windows Explorer provavelmente ofereceria uma lista de identificação de shell primeiro, já que é uma representação quase perfeita do conteúdo de uma janela do Windows Explorer. Em seguida, na lista, poderia haver um descritor de grupo de arquivos, seguido por seu conteúdo, e um HDROP.

Em 1998, a equipe de shell tentou adicionar texto sem formatação à lista de formatos oferecidos, colocando-o no fim da lista. Isso dizia basicamente: "se você está mesmo desesperado, pelo menos, pode obter algum texto de mim (ou seja, a lista de arquivos)". Infelizmente, o que acontecia era que um grande número de programas se distraía com o formato de texto chamativo e dizia: "Hum, gosto de texto". Esses programas iam direto ao formato de texto que não continha nada além de uma lista de arquivos. Conseqüentemente, quando se arrastava um arquivo do Windows Explorer e o soltava em um documento, o programa inseria apenas o nome do arquivo no documento, em vez do arquivo em si.

Opa!

Graças aos comentários de compatibilidade de aplicativos extremamente negativos, essa alteração foi revertida. Agora, quando se arrasta e solta ou cola arquivos que são copiados do Windows Explorer, o objeto de dados do shell não oferece os nomes dos arquivos como texto.

Entretanto, o Windows Vista® corrige esse velho erro fornecendo uma maneira de copiar o caminho como texto: manter a tecla Shift pressionada e clicar com o botão direito do mouse para obter o menu de contexto estendido. Essa ação apresentará a nova opção Copiar como Caminho. Nada de PowerToy.

Raymond Chen, The Old New Thing (O novo velho), e o livro homônimo (Addison-Wesley, 2007) tratam da história do Windows e da programação Win32. Ele deixa o trabalho de operacionalização de mecanismos para os outros.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..