怎样判断当前剪贴板中的内容为文件 ,如何将指定文件 ( 不是文件内容 ) 拷贝到剪贴板中。请问各位大侠 : 怎样判断当前剪贴板中的内容为文件 ,如何将指定文件 ( 不是文件内容 ) 拷贝到剪贴板中。
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 上