剪贴板的小问题,高手快来帮忙 ( 积分: 50 )

  • 主题发起人 主题发起人 sy0116
  • 开始时间 开始时间
S

sy0116

Unregistered / Unconfirmed
GUEST, unregistred user!
用下面的代码实现在按下热键时把剪贴板里的内容换成“SSS”然后模拟按键Ctrl+V粘贴,最后再把剪贴板原来的内容还原,可是为什么每次按下热键时粘贴出来的都不是“SSS”而是剪贴板里原来的内容呢?而且经常出现“Cannot open clipboard”的错误提示。<br>procedure tform1.ONHotkey(var message:Tmessage);<br>begin<br>txt0:=Clipboard.AsText;<br>Clipboard.AsText:='sss';<br>keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);<br>keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);<br>keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);<br>keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);<br>Clipboard.AsText:=txt0;<br>end;<br>
 
用下面的代码实现在按下热键时把剪贴板里的内容换成“SSS”然后模拟按键Ctrl+V粘贴,最后再把剪贴板原来的内容还原,可是为什么每次按下热键时粘贴出来的都不是“SSS”而是剪贴板里原来的内容呢?而且经常出现“Cannot open clipboard”的错误提示。<br>procedure tform1.ONHotkey(var message:Tmessage);<br>begin<br>txt0:=Clipboard.AsText;<br>Clipboard.AsText:='sss';<br>keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);<br>keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);<br>keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);<br>keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0);<br>Clipboard.AsText:=txt0;<br>end;<br>
 
在上面的代码中设断点看一下,是否有执行;或是执行了,而中间的代码有问题。
 
在Clipboard.AsText:=txt0;前加了一句Sleep(50)竟然就OK了,难道系统反应不过来?
 
先取出来改完再贴回去不行呀,非要在剪贴版里改,况且如果是你自己贴进去的,可以先放到流里或者字符串里处理后再存入剪贴版嘛,干嘛这么费尽?
 
同意楼上[:)]
 
没有在剪贴板里改阿
 
系统因机器而异,最好有延迟才能保证不出问题,因为是内存间的数据传递,需要时间。<br>但是可以不用剪贴板而想其它的办法就更好。
 
有没有什么办法可以判断数据传送已经结束?
 
sorry刚才没仔细看,以为你要修改剪贴板里的内容<br>楼上的有道理,而且在赋值的时候剪贴板里面如果存有其他的杂七杂八的数据可是会出问题的,你知道赋值前剪贴板里面存了什么数据么?有多大?可以试试下面的代码看看存储的对不对<br>procedure TForm1.Button6Click(Sender: TObject);<br>begin<br>memo1.CopyToClipboard;<br>end;<br><br>procedure TForm1.Button7Click(Sender: TObject);<br>begin<br>memo1.PasteFromClipboard;<br>end;<br>就是用控件修改其内容
 
几天没动这个程序今天再来运行竟然又出现了第一个问题,发现只要把Clipboard.AsText:=txt0;这一行注释掉就可以了,好像有了这一行Clipboard.AsText:='sss';就不起作用了一样,这到底是什么原因啊?<br>
 
Clipboard.SetTextBuf(Pchar(Text0));
 
procedure TForm1.Button6Click(Sender: TObject);<br>begin<br>memo1.CopyToClipboard;<br>end;<br><br>procedure TForm1.Button7Click(Sender: TObject);<br>begin<br>memo1.PasteFromClipboard;<br>end;<br>就是用控件修改其内容 &nbsp;<br>[purple][/purple][:)]
 
盛利老大说的方法没有用啊,还是一样<br>我不想用控件
 
你想作什么,泡泡房?
 
有偿请Delphi高手写个小程序,有兴趣的来看一下<br><br>本人非常喜欢Delphi &nbsp; 正在努力学习中,现有尝请高手写个小程序(木 马类),我有原代码,在原代码的基础上做些改动,有这方面经验的高手请联系我! &nbsp; QQ-9807009
 
后退
顶部