用下面的代码实现在按下热键时把剪贴板里的内容换成“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;
解决方案 »
- 表格绘图,请教一下,下面的报表中的图,采用何种方法进行绘制?
- socket发送record类型变量,怎么会这样??
- 欢迎各位赏脸^_^
- 有谁知道QQ样式的菜单原名叫什么???
- DBGrid 的編輯操作 在線
- 数据打包、上传的问题,希望大家给些帮助!没分了不好意思,只能给这么多了!
- 在程序中怎么去搜索电脑中我指定的文件夹或文件.(这个文件或文件夹我事先并不知道)??????
- ado可不可以操纵ftp上的mdb数据库?
- 在ACCESS 中 数据类型用 是/否 字段时表中会出现一个复选框来表示“是/否”而在DELPHI 中用DBGRID 控件调用此表时,表中却是用“TRUE,FAL
- 如何不让子窗口自动打开?
- delphi 通过语句如何创建mysql数据库
- 100分,就问个数组的清零的问题!!!谢谢了
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.