仅仅从检查剪贴板,我就能看到至少2种有用的格式:
FileName
(Ansi) 和 FileNameW
(Unicode),它们保存了复制到剪贴板中的文件名。因此你可以使用RegisterClipboardFormat
注册其中一个(或两个),然后获取你需要的信息。例如:
uses Clipbrd;
var
CF_FILE: UINT;
procedure TForm1.FormCreate(Sender: TObject);
begin
CF_FILE := RegisterClipboardFormat('FileName');
end;
function ClipboardGetAsFile: string;
var
Data: THandle;
begin
Clipboard.Open;
Data := GetClipboardData(CF_FILE);
try
if Data <> 0 then
Result := PChar(GlobalLock(Data)) else
Result := '';
finally
if Data <> 0 then GlobalUnlock(Data);
Clipboard.Close;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Clipboard.HasFormat(CF_FILE) then
ShowMessage(ClipboardGetAsFile);
end;
获取文件名后,可以获取其大小或其他想要的属性。
注意:以上内容已在 Delphi 7 中进行测试。对于 Unicode 版本的 Delphi,请使用 FileNameW
格式。
另一种更实用的方法(也适用于复制多个文件)是注册并处理CF_HDROP
格式。
以下是 Delphi 的示例:如何从 Windows 资源管理器中粘贴文件到您的应用程序
FileName
格式,您需要将PChar
替换为PAnsiChar
,并将string
替换为AnsiString
。无论如何,在Unicode版本/环境中使用FileNameW
更有意义。总之,我个人认为应该选择CF_HDROP
,因为它还可以处理多个文件,并且您不能假设用户只复制了一个文件。(在这种情况下,FileNameW
格式将返回列表中的第一个文件)。 - kobik
TClipboard
的文档并不是很有用。 - Josef Švejk