思路是:
定义组合热键alt+1或者ctrl+1来模拟ctrl+c的复制操作,并将剪贴板的文本赋给某一变量。
dim Astr as string
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
ret = RegisterHotKey(Me.hwnd, 1, MOD_CONTROL, 48)
ret = RegisterHotKey(Me.hwnd, 2, MOD_ALT, 48) Clipboard.Clear
keybd_event MOD_CONTROL, 0, 0, 0
keybd_event vbKeyC, 0, 0, 0
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event MOD_CONTROL, 0, KEYEVENTF_KEYUP, 0
sleep 1000
Astr=Clipboard.GetText问题1:利用组合热键ctrl+1可以成功模拟,而alt+1则不能够,后面实践是ctrl+任何数都可以,而 alt则不行。问题2:ctrl+1可以成功模拟,而Clipboard.GetText在当时过程中确取不到值。非要等当时程序运行完成后,另外调用Clipboard.GetText才有值,怎么办?
定义组合热键alt+1或者ctrl+1来模拟ctrl+c的复制操作,并将剪贴板的文本赋给某一变量。
dim Astr as string
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
ret = RegisterHotKey(Me.hwnd, 1, MOD_CONTROL, 48)
ret = RegisterHotKey(Me.hwnd, 2, MOD_ALT, 48) Clipboard.Clear
keybd_event MOD_CONTROL, 0, 0, 0
keybd_event vbKeyC, 0, 0, 0
keybd_event vbKeyC, 0, KEYEVENTF_KEYUP, 0
keybd_event MOD_CONTROL, 0, KEYEVENTF_KEYUP, 0
sleep 1000
Astr=Clipboard.GetText问题1:利用组合热键ctrl+1可以成功模拟,而alt+1则不能够,后面实践是ctrl+任何数都可以,而 alt则不行。问题2:ctrl+1可以成功模拟,而Clipboard.GetText在当时过程中确取不到值。非要等当时程序运行完成后,另外调用Clipboard.GetText才有值,怎么办?
如果要用你自己定义的热键来做CTRL+C和CTRL+V的等效工作可不是这么简简单单几行代码能完成的,接收HOTKEY消息必须要你对FORM的消息处理函数进行重新的编写(就是所谓的子类化窗体),在那里面截获HOTKEY消息,再做和复制粘帖有关的事情(麻烦,要知道当前活动窗体是谁,被选中的又是什么),结果你还是发送CTRL+C或CTRL+V来做这个工作,绕了个远路,回到起点,没必要。SLEEP就是挂起进程,后面的代码必须等它返回后才有机会运行。
Public Const MOD_CONTROL = &H2
keybd_event MOD_CONTROL, 0, 0, 0
=====================
这个keybd_event第一个参数是一个virtual-key
VK_LCONTROL的virtual_key是 A2
而你这里输入&1, &2只是对应于
VK_LBUTTON 01 Left mouse button
VK_RBUTTON 01 Right mouse button
也就是说根本就没有按ctrl键但是为什么你定义热键为ctrl+xxx有用,alt没用呢
因为你是在热键的回掉中调用. 热键的回掉是在热键被按下时产生的,
你在ctrl+xxx的时候回掉, 所以当前ctrl被按下拉
ctrl-->down
接着你发送了
c-->down c--->up
接着回掉结束后, 注册的热键弹起来了
ctrl-->up
于是这时还是"相当于"模拟了ctrl+c, 这时clipboard才有了东东.
Astr=Clipboard.GetText这句是在回掉中, 也就是ctrl没有弹起来之前
所以当然得不到.
我认为sleep后也应该得不到, 因为回掉没结束应该收不到ctrl up消息
(如果sleep后可以收到, 表示键盘消息这里是异步的)你只要把
keybd_event MOD_CONTROL, 0, 0, 0 写成
keybd_event &ha2, 0, 0, 0
后面的
keybd_event MOD_CONTROL, 0, KEYEVENTF_KEYUP, 0
keybd_event &ha2, 0, KEYEVENTF_KEYUP, 0