|
以前在CSDN上就拜读过嗷嗷叫的老马的文章,受益匪浅。也非常感谢!
这次找vb6下关于热键的技术文章,找来找去都是语焉不详,包括网上王国荣VC写的那个dll。也许水平有限,看了半天还是不知道该如何用。终于还是下载看了老马的那个例子,大致明白了。
于是自己试着测试了一下,那个热键类没有任何改动,只是建了一个form,然后注册3个热键,
但是发现第3个怎么也注册不成功,于是又加个GetLastError来看API调用错误,发现是1409(热键已注册)。
不知道怎么回事,特来求教。源码附上。敬请指点。
不能上传文件啊。那就说下吧。
类cHotkey原样照抄,一字没改。只是加了一些debug.Print。
建了一个From,在里边注册了3个热键:F10,F11,F12。
运行调试,发现在F12注册时,返回热键已注册的错误,注册失败。
在cHotKey里边加了句:(GetLastError已声明:Private Declare Function GetLastError Lib "kernel32" () As Long)
I = RegisterHotKey(mfrmHwnd, KeyAtom(UBound(KeyAtom)), K, HotKey)
Debug.Print "HotKeyRegister: " & I & "; GetLastError: " & GetLastError
注册F10和F11时,没出错,立即窗口:HotKeyRegister: 1; GetLastError: 0
注册F12时,立即窗口:HotKeyRegister: 0; GetLastError: 1409
Form源码:
---------------------------------------------------------------------------------------
Option Explicit
Dim WithEvents myHotKey As cHotkey
Dim hkIndex(3) As Integer
Private Sub Form_Load()
Set myHotKey = New cHotkey
myHotKey.frmHwnd = Me.hwnd
Debug.Print "==========" & myHotKey.frmHwnd
hkIndex(0) = myHotKey.AddHotKey(vbKeyF10) - 1
hkIndex(1) = myHotKey.AddHotKey(vbKeyF11) - 1
hkIndex(2) = myHotKey.AddHotKey(vbKeyF12) - 1 '<--这个注册失败了
Debug.Print hkIndex(0) & ", " & hkIndex(1) & ", " & hkIndex(2)
myHotKey.StartHotKeys Timer1
End Sub
Private Sub Form_Unload(Cancel As Integer)
myHotKey.ClsAllHotKey
Set myHotKey = Nothing
End Sub
Private Sub myHotKey_HotKeyPress(ByVal HotKeyIndex As Long, ByVal HotKey As Long, ByVal hCtrl As Boolean, ByVal hAlt As Boolean, ByVal hShift As Boolean)
MsgBox "Hot Key press!"
If HotKeyIndex = vbKeyF10 Then
MsgBox "F10"
End If
End Sub
|
|