本帖最后由 sxj0384 于 2009-12-27 10:54:06 编辑

解决方案 »

  1.   

    不妨在两个过程里都加上 On Error Goto 确定一下错误出现在哪一行
      

  2.   

    Check1.Value = Checked
    Check1.Value = Unchecked
    这2句是什么,值为1就是选中,0就是没选中
      

  3.   

    checked 就是 1
    unchecked 就是 0
      

  4.   

    If (Check1.Value = Unchecked) Then
          'Check1.Value = Checked
          HotKey vbKey2     '注册热键
     Else
        
        HotKey_Flg = True '停止热键等待
        Call UnregisterHotKey(Me.hWnd, &HBCFF&)
        'Check1.Value = Unchecked
     End If你这地方在不停的运行 你知道吗 ?还有 2F asftrhgjhkjlkttttttt 提醒你的是正确的 CheckBox原本的时计就是0与1VB有很多的地方都可 "兼容", 但身为编程员 最好遵守 "游戏规则" 不是等着裁判让你过关.
      

  5.   

    CheckBox 不需要你用代码去改变 点了它 就是0与1自动转换 你只要判断是0与1 其它不用你管
      

  6.   

    这个已经改过来了代码如下:
    If (Check1.Value = Unchecked) Then 
       on error goto Q:  
          HotKey vbKey2    '注册热键 
    Else 
        
        HotKey_Flg = True '停止热键等待 
         Call UnregisterHotKey(Me.hWnd, &HBCFF&) 
    Q: debug.print "check1_error"
        End If ,可是那个勾一勾上,他就没法去掉了,怎么回事?
      

  7.   

        On Error GoTo Q 'On Error要放在函数或过程的第一句,不然无法捕捉所有错误'
        
        If (Check1.Value = Unchecked) Then
              HotKey vbKey2    '注册热键
        Else
            Check1.Value = Unchecked '加上这句'
            HotKey_Flg = True '停止热键等待
            Call UnregisterHotKey(Me.Hwnd, &HBCFF&)
        End If
        
        Exit Sub
    Q:     '错误处理要放在正常流程之后,不然扰乱正常流程'
            Debug.Print "check1_error"
            Stop
            Resume
    End Sub
      

  8.   

    你的hotkey不能这样写 懒得改你的Private Sub ProcessMessages()
        Dim Message As Msg
        Do While Not bCancel
           WaitMessage
           If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
               if check1.Value=1 then WindowState = vbMinimized
           End If
           DoEvents
        Loop
    End Sub
      

  9.   

    用法不对。需要 HOOK 窗口消息。
    用 RegisterHotKey 注册热键后,在消息循环中 处理 WM_HOTKEY 消息。