剪贴板的小问题,高手快来帮忙

zhaoyu_me 2005-02-21 01:55:18
用下面的代码实现在按下热键时把剪贴板里的内容换成“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;
...全文
135 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaoyu_me 2005-02-27
  • 打赏
  • 举报
回复
全部代码:
unit Unit1;

interface

uses
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.
zhaoyu_me 2005-02-27
  • 打赏
  • 举报
回复
KEYDB_EVENT语句使用来模拟按下CTRL+V组合键的啊,我的思路是这样的:
首先把剪贴板的内容保存在txt0中,然后把剪贴板的内容修改为“SSS”,然后模拟按键CTRL+V粘贴,最后恢复剪贴板内容
leeshine 2005-02-26
  • 打赏
  • 举报
回复
begin
Clipboard.Open;
txt0:=Clipboard.AsText;
Clipboard.AsText:='sss';
Clipboard.Close;
end;
至于剪切板内容的恢复,楼主自己解决吧!
todouwang 2005-02-25
  • 打赏
  • 举报
回复
给出完整的代码,看剪切板使用有没有不合适的地方
aquadp 2005-02-24
  • 打赏
  • 举报
回复
我觉得没那么复杂吧。只需要在粘贴前使用
Clipboard.AsText:='sss';就可以了啊。

DELPHI会自动把剪贴板的内容改为SSS啊。。。。。。

不需要那些KEYDB_EVENT那些语句!!!
zhaoyu_me 2005-02-22
  • 打赏
  • 举报
回复
自己顶

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧