callback里面把所有的wm_keydown消息都给拦下来我没试过,不过理论上应该行得通。不过这样做ctrl+alt+del应该是拦不到的,那样的话要用到keyboard hood,比较麻烦。第二个问题我不知道

解决方案 »

  1.   

    一定是在得到回车后,执行了Sendkeys "{Tab}"。
    这是win2000键盘驱动程序的BUG。解锁:
    控制面板-键盘-(重新设置刷新率)解决方案:
    方法一:打最新的win2000 service pack补丁。
    方法二:用下列API函数替代Sendkeys:

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte,ByVal _
     bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)Const KEYEVENTF_KEYUP = &H2
    Const VK_TAB = &H9keybd_event VK_TAB, 0, 0, 0
    keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0或
    2
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
     (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
       ByVal lParam As Long) As LongConst WM_KEYDOWN As Long = &H100
    Const VK_TAB As Long = &H9
    Dim retVal as longretVal = PostMessage(Me.hwnd, WM_KEYDOWN, VK_TAB, 0)
      

  2.   

    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)Private Const KEYEVENTF_KEYUP = &H2
    Private Const VK_TAB = &H9Public Sub KeyNext(ByRef KeyAscii As Integer)
        If KeyAscii = vbKeyReturn Then
            keybd_event VK_TAB, 0, 0, 0
            keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
            KeyAscii = 0
        End If
        
    End Sub
    调用:
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        KeyNext KeyAscii
    End Sub