procedure TForm1.Button1Click(Sender: TObject);
begin
      keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
      keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), 0, 0);
      keybd_event(ord('C'), MapVirtualKey(ord('C'), 0), KEYEVENTF_KEYUP, 0);
      keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);  }
end;
用模拟键盘的方法好像会因和系统热键冲突,所以上面的代码经测试无效!我想注册一个全局热键,一按这个热键就可以实现和系统的Ctrl+C一样的复制操作,如何实现?(最好有代码和注释,本人菜鸟)

解决方案 »

  1.   

    OpenClipboard(hWnd); // 打开剪贴板
    EmptyClipboard(); // 清空剪贴板
    SetClipboardData(CF_TEXT, hGlobalMemory); // 将内存中的数据放置到剪贴板
    CloseClipboard(); // 关闭剪贴板 
      

  2.   

    USES
        StdCtrls,Clipbrd;
    ......
    Clipboard.AsText :=xxx
      

  3.   

    楼上二位都回避了一个关键的问题:我们都知道系统剪贴板的使用方法是,选中一个对象然后按Ctrl+C就可实现复制。现在,我们只知道要复制的对象是当前用户已经用鼠标选中的对象,而不知道这个对象的类型,是文字、图像、文件?也不知道这个对象在哪个窗口,哪个进程中,因为它是时刻变化的,我前一分钟在记事本窗口复制了一段文字,后一分钟又到浏览器中复制一幅图片……所以,这里的xxxxxx如何表述?
      

  4.   

    Delphi的clipbrd.pas中间定义了HasFormat以及GetAsHandle方法,用这些方法可以得到指定格式数据的句柄或者查询指定格式的内容
      

  5.   

    也就是说你要复制未知程序中的未知选择(如果有的话)。这等于将程序建于引入不可预料的行为之上。不可预料的行为通常在软件开发中被称为BUG,不知道你为什么在需求中写bug。
      

  6.   

    用ActionList建好热键,在热键处理上写复制粘贴代码,复制粘贴的代码葵花宝典上有讲。
      

  7.   

    葵花宝典在哪里?需求:想做个软件辅助人工从网上复制信息录入数据库或word文档。先在浏览器中打开相应页面,选中要复制的信息,例如一辆汽车,分为型号、颜色、价格、外观图片,选中型号按F1,复制到剪贴板,再从剪贴板复制到一个临时变量xh中储存;再选中颜色按F2复制,程序再自动从剪贴板复制到临时变量ys,再选中图片,按F4程序自动复制到剪贴板再从剪贴板复制到一个储存图片的临时变量中,当该车所有参数都录入完,操作者突然发现价格和自己电脑中的资料有出入,需要更新,于是又打开一个记事本,选中价格,按F3,程序自动将其复制到剪贴板再覆盖刚才已经录入临时变量的jg中的数据,确认所有参数无误,再按一个快捷键将该车所有数据写入一个既定格式的word文档中(自动生成)。本来想做成全自动的,但是自己还没那个功力,所以先做个半自动的,楼上jiangsheng说的不可预料的行为我还是不理解啊~~Windows系统自带的Ctrl+c不也是不可预料的行为吗,但是很实用。所以写程序的时候不知道复制对象在哪个窗口,哪个进程,是何类型
      

  8.   

    如果页面格式固定
    直接解析HTML不就行了吗
      

  9.   

    复制到剪贴板是可以预料的行为
    Ctrl+C未必是复制的快捷键