用下面的代码实现在按下热键时把剪贴板里的内容换成“SSS”然后模拟按键Ctrl+V粘贴,最后再把剪贴板原来的内容还原,可是为什么每次按下热键时粘贴出来的都不是“SSS”而是剪贴板里原来的内容呢?而且经常出现“Cannot open clipboard”的错误提示
procedure tform1.ONHotkey(var message:Tmessage);
begin
txt0:=Clipboard.AsText;
Clipboard.AsText:='sss';
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
Clipboard.AsText:=txt0;
end;

解决方案 »

  1.   

    我觉得没那么复杂吧。只需要在粘贴前使用
    Clipboard.AsText:='sss';就可以了啊。DELPHI会自动把剪贴板的内容改为SSS啊不需要那些KEYDB_EVENT那些语句!!!
      

  2.   

    begin
    Clipboard.Open;
    txt0:=Clipboard.AsText;
    Clipboard.AsText:='sss';
    Clipboard.Close;
    end;
    至于剪切板内容的恢复,楼主自己解决吧!
      

  3.   

    KEYDB_EVENT语句使用来模拟按下CTRL+V组合键的啊,我的思路是这样的:
    首先把剪贴板的内容保存在txt0中,然后把剪贴板的内容修改为“SSS”,然后模拟按键CTRL+V粘贴,最后恢复剪贴板内容
      

  4.   

    全部代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,Clipbrd;
      const
    WM_SNAPHOTKEY=WM_USER+102;
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
      procedure ONHotkey(var message:Tmessage);message WM_HOTKEY;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      txt0,txt:string;
    implementation{$R *.dfm}
    procedure tform1.ONHotkey(var message:Tmessage);
    begin
    if  (message.WParam=WM_SNAPHOTKEY) then
    begin
    txt0:=Clipboard.AsText;
    Clipboard.AsText:=#13#10'sss';
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
    keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
    keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
    keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);
    //Clipboard.AsText:=txt0;
    end;
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    RegisterHotKey(Handle,WM_SNAPHOTKEY,MOD_shift,VK_return);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
    unRegisterHotKey(Handle,WM_SNAPHOTKEY);
    end;end.