如何将文件拷贝到剪贴板
2011-03-09 12:15
211 查看
怎样判断当前剪贴板中的内容为文件,如何将指定文件(不是文件内容)拷贝到剪贴板中。请问各位大侠:怎样判断当前剪贴板中的内容为文件,如何将指定文件(不是文件内容)拷贝到剪贴板中。
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上.
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上.
相关文章推荐
- 如何将文件拷贝到剪贴板
- 如何复制文件到剪贴板
- Linux下面如何拷贝和删除隐藏的目录和文件
- APK安装时如何拷贝apk里的文件到sdcard
- 如何把位图拷贝到剪贴板中
- 如何让cp 只拷贝一个文件夹下面的文件,而不是拷贝整这个文件夹
- 已知/tmp目录下已经存在了test.txt文件,如何执行命令才能把/mnt/test.txt拷贝到/tmp下覆盖掉/tmp/test.txt,而让linux系统不提示是否覆盖(root权限下)
- C程序:如何拷贝文本到Windows剪贴板
- 如何在linux和windows之间进行文件的随意拷贝
- Linux 如何用vim命令把编辑文件的几行内容拷贝到一个新文件
- Linux下如何拷贝整个目录下的所有文件
- 如何在Linux环境下利用移动硬盘进行文件拷贝工作
- 如何把位图拷贝到剪贴板中
- linux下如何在拷贝目录时剔除掉某些文件
- 如何查找到文件以后,带目录一起拷贝到新的目录? cp --parents source destination
- 如何从虚拟机里面拷贝出文件
- 如何与资源管理器互动剪切/拷贝/粘贴文件
- Visual Studio VS如何拷贝一个项目的窗体文件到另一个项目
- 如何在命令行用mysqldump从远程数据库拷贝数据库中的所有数据以及用命令行运行拷贝出来的.sql文件
- Mac如何拷贝文件到移动硬盘