用下面的代码实现在按下热键时把剪贴板里的内容换成“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;
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;
Clipboard.AsText:='sss';就可以了啊。DELPHI会自动把剪贴板的内容改为SSS啊不需要那些KEYDB_EVENT那些语句!!!
Clipboard.Open;
txt0:=Clipboard.AsText;
Clipboard.AsText:='sss';
Clipboard.Close;
end;
至于剪切板内容的恢复,楼主自己解决吧!
首先把剪贴板的内容保存在txt0中,然后把剪贴板的内容修改为“SSS”,然后模拟按键CTRL+V粘贴,最后恢复剪贴板内容
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.