HOOK 实现剪贴板功能异常。
我想实现一个功能:通过HOOK API ,截获键盘消息"F4",并执行自己的代码,这段代码将自动点击鼠标去复制,某网页上的某个字符串,(全选,并按CTRL+C),然后将剪切板内容复制到内存变量当中。.我这段码是通过EXCEL VBA实现的,调用WINDOWS API 实现。但总是不稳定,我发现有时能复制过来,有时复制不过来,有时确时当前窗口人工选择某字符串时按的CTRL+C 复制内容,不是预期的目标网页上的字符串。问题出在哪呢?? 一直没有想明白。请高手分析一下。多谢!
之前是选中字符串的鼠标代码和发送CTRL+C的代码,后面是剪切板内存
SetCursorPos X, y
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
'Sleep 4000
Call keybd_event(17, 0, 0, 0) '//按下ctrl
Call Delay(100)
Call keybd_event(67, 0, 0, 0) '//按下c
Call Delay(100)
Call keybd_event(67, 0, 2, 0) '//松开c
Call Delay(100)
Call keybd_event(17, 0, 2, 0) '//松开ctrl
OpenClipboard ByVal 0&
If IsClipboardFormatAvailable(CF_UNICODETEXT) Then
hMem = GetClipboardData(CF_UNICODETEXT)
lpData = GlobalLock(hMem)
nSize = GlobalSize(hMem)
destnation_string= String(nSize, 0)
CopyMemory ByVal StrPtr(destnation_string), ByVal lpData, ByVal nSize
GlobalUnlock hMem
eoms_id = left(eoms_id, InSt(destnation_string, Chr(0)) - 1)
End If
Debug.Print destnation_string
CloseClipboard