首页  编辑  

如何将文件拷贝到剪贴板

Tags: /超级猛料/Stream.File.流、文件和目录/Shell操作/   Date Created:
怎样判断当前剪贴板中的内容为文件,如何将指定文件(不是文件内容)拷贝到剪贴板中。请问各位大侠:怎样判断当前剪贴板中的内容为文件,如何将指定文件(不是文件内容)拷贝到剪贴板中。
int GetClipboardFormatName(
 UINT format,            // clipboard format to retrieve
 LPTSTR lpszFormatName,  // address of buffer for name
 int cchMaxCount         // length of name string in characters
);
如果format=CF_HDROP就是文件了
HANDLE SetClipboardData(
 UINT uFormat, // clipboard format
 HANDLE hMem   // data handle
);
menxin的方案是可行的.Delphi定义了两个格式:CF_PICTURE和CF_COMPONENT.
用户可以定义自己的格式.不过因为Formats是WORD格式,所以系统中只能有
16种格式.打开ClipBrd单元,可以查到.
 CF_PICTURE := RegisterClipboardFormat('Delphi Picture');
 CF_COMPONENT := RegisterClipboardFormat('Delphi Component');
你添加:
 CF_MYFILE := RegisterClipboardFormat(' My File Format');
剪贴板操作:
打开;
清空;
SetFormatData(CF_TEXT)  --->文件名;
SetFormatData(CF_MYFILE)  --->文件内容
关闭;
如果你只对文件名感兴趣,那只是一个文本格式.取出内容,用FileExists查询
是否存在即可.
registerClipboardFormat函数登记新的剪贴板格式
格式的值在OXC000和0XFFF范围
IsClipboardFormatAvailable函数判断剪贴板是否包含指定格式数据
格式可用返回非零值
windows是有定义:
可以用cf_Hdrop;
uses shlobj,activex,clipbrd;
procedure TForm1.Button1Click(Sender: TObject);
var
 FE:TFormatEtc;
 Medium: TStgMedium;
 FileName:String;
 dropfiles:PDropFiles;
 pFile:PChar;
begin
 FileName:='c:\1.bmp';
 FE.cfFormat := CF_HDROP;
 FE.dwAspect := DVASPECT_CONTENT;
 FE.tymed := TYMED_HGLOBAL;
 Medium.hGlobal := GlobalAlloc(GMEM_SHARE or GMEM_ZEROINIT, SizeOf(TDropFiles)+length(FileName)+1);
 if Medium.hGlobal<>0 then begin
   Medium.tymed := TYMED_HGLOBAL;
   dropfiles := GlobalLock(Medium.hGlobal);
   try
     dropfiles^.pfiles := SizeOf(TDropFiles);
     dropfiles^.fwide := False;
     longint(pFile) := longint(dropfiles)+SizeOf(TDropFiles);
     StrPCopy(pFile,FileName);
     Inc(pFile, Length(FileName)+1);
     pFile^ := #0;
   finally
     GlobalUnlock(Medium.hGlobal);
   end;
   Clipboard.SetAsHandle(CF_HDROP,Medium.hGlobal);
 end;
end;
参照dragdrop做了一个,还不错.
上面这个例子把filename这个文件放在了clipboard上