zoukankan      html  css  js  c++  java
  • 如何将文件拷贝到剪贴板

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

  • 相关阅读:
    # bootstrap Grid System 柵格系统中“移动优先”的一个小体现[bootstrap ]
    ENGLISH HANDWRITING
    #PHP 类的多继承实现之 traits.md
    #linux vscode 保存总提示“Retry as sudo”
    #【php留存问题-2020年6月19日】,手动为数组添加一个间隔元素,再遍历的时候,提示索引为空
    #Linux 下 Xampp的安装与Hello World
    # 详细了解HTML5中的form表单
    # Promise的简单理解和基本使用
    #简单理解回调函数
    Java中几种常见的设计模式--工厂设计模式
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/1978148.html
Copyright © 2011-2022 走看看