即文件ctrl+c复制后,用ctrl+v粘贴出来

解决方案 »

  1.   

    这要看剪贴板中是什么样的内容而定了,比如:{--------------------------------------------------------------
      过程: g_pro_SavePicInClipboard
      作者: 黄仁光
      日期: 2002年12月19日
      参数:
      目的: None
      备注:将剪贴板的BMP图片存到本地文件
    --------------------------------------------------------------}procedure g_pro_SavePicInClipboard(strFileName: string);
    var
      objBitmap    : TBitmap;
    begin
      try
        objBitmap := TBitmap.Create;
        objBitmap.Assign(Clipboard);
        objBitmap.SaveToFile(strFileName);
      finally
        FreeAndNil(objBitmap);
      end;
    end;
      

  2.   

    ctrl+c只是在剪贴板中建立文件的一个链接信息,并不是真的复制文件内容到剪贴板。这点可以通过“ctrl+c一些文件后,然后删除这些文件,再按Ctrl+V,系统提示找不到源文件”得到佐证。以下一段代码可以得到被Ctrl+C的文件的名字(含路径),然后利用这些文件名,就可以通过调用API函数CopyFile或者CopyFileEx实现文件粘贴了。var
      DataHandle: Thandle;
      FilesCount: Integer;
      FileName: PChar;
      I: Integer;
    begin
      if Clipboard.HasFormat(CF_HDROP) then
      begin
        GetMem(FileName, MAX_PATH+1);
        DataHandle := Clipboard.GetAsHandle(CF_HDROP);
        FilesCount := DragQueryFile(DataHandle, MAXDWORD, FileName, MAX_PATH);
        for I := 0 to FilesCount-1 do
          if DragQueryFile(DataHandle, I, FileName, MAX_PATH) > 0 then
            Memo1.Lines.Add(FileName);  //将文件名添加到Memo1
        FreeMem(FileName);
      end;
    end;————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  3.   

    以上代码需要 "uses Clipbrd, ShellAPI;"————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  4.   

    监视剪切板,如果是copy的文件,则列出文件名,包括路径。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
        NextClipHwnd:HWND;//观察链中下一个窗口句柄 
        procedure WMDrawClipBoard(var MyMessage:TMessage);message WM_DRAWCLIPBOARD;
        //处理WM_DRAWCLIPBOARD消息过程
        procedure WMChangeCBChain(var MyMessage:TMessage);message WM_CHANGECBCHAIN;
        //处理WM_CHANGECBCHAIN消息过程
      end;var
      Form1: TForm1;implementation
    uses
      clipbrd,shellAPI;
    {$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    Clipboard.Clear; //初始化剪贴板
    NextClipHwnd:=SetClipBoardViewer(Handle);//嵌入新的剪贴监视器
    end;procedure TForm1.WMDrawClipBoard(var MyMessage: TMessage);
    var
      drophandle :Thandle;
      Filescount :integer;
      FileName :array[0..MAX_PATH] of Char;
      i :integer;
    begin
    sendmessage(NextClipHwnd,MyMessage.Msg,MyMessage.WParam,MyMessage.LParam);
    if clipboard.HasFormat(CF_HDROP) then
    begin
      drophandle:=Clipboard.GetAsHandle(CF_HDROP);
      filescount:=DragQueryFile(Drophandle,$FFFFFFFF,Filename,max_path); //获得文件拖放数目
      for i:=0 to filescount-1 do
      begin
        fillchar(filename,sizeof(filename),0);
        if dragqueryfile(drophandle,i,Filename,max_path)>0 then
           memo1.lines.add(strpas(@filename));
      end; //获取所有拖放文件的文件名
    end;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    ChangeClipboardChain(Handle,NextClipHwnd);//删除剪贴板监视器
    end;procedure TForm1.WMChangeCBChain(var MyMessage: TMessage);
    begin
    sendmessage(NextClipHwnd,MyMessage.Msg,MyMessage.WParam,MyMessage.LParam);//向下一个监视器传递监视器删除消息
    end;end.