我有段代码,使关于全局快捷键的, 但发现如果用CTRL+~隐藏了窗口, 就无法用 ALT+~显示窗口了.....如果把那个隐藏的代码全部注释掉, 有可以了, 奇怪....看不出问题在哪里 , 谁帮忙看看, !!谢谢 
'=====窗口里头的过程========
Private Sub Form_Load()
   Timer1.Interval = 100
End SubPrivate Sub Timer1_Timer()
    'ctrl+~全部隐藏
   If Hotkey2(17, 192)Then '这个用了 下面的快捷键就失效....
      Msgbox "hide"
       Me.visible = False
    End If
    'alt+~全部显示
    If Hotkey2(18, 192) Then
      Msgbox "show"
       Me.Visible = True
   End If
End Sub测试发现如果用2个timer控件倒是可以实现效果,,,,,但究竟为什么会这样,,,,,,不搞懂实在难受呀....肯定有它的道理的.....

解决方案 »

  1.   

    1.可能是系统键冲突或未释放,你把ctrl和alt改成其他键试试。
    2.不知道你这个hotkey2是啥函数,具体封闭的是啥。以前我用全局快捷键的时候是自己封闭API的,我记得好像要有个ID的吧,就像打开文件一样,要有个文件号,你是不是没有区分ID,导致覆盖了?
    3.全局键盘钩子,想做啥都可以了。
      

  2.   

    '=====模块代码========
    '全局判断按键状态
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
    '判断2个键的组合为快捷键
    Public Function Hotkey2(lkey As Long, Rkey As Long) As Boolean
       lkey = GetAsyncKeyState(lkey)
       Rkey = GetAsyncKeyState(Rkey)
       If lkey And Rkey = -32767 Then Hotkey2 = True
    End Function
    就这个了.....不知道是不是不对 ?
      

  3.   

    你这样,不要修改窗体的隐藏和显示,在窗体放个textbox,然后修改你的hotkey:Public Function Hotkey2(lkey As Long, Rkey As Long) As Boolean
      lkey = GetAsyncKeyState(lkey)
      Rkey = GetAsyncKeyState(Rkey)
      Form1.Text1.Text = lkey & "&&" & Rkey
      If lkey And Rkey = -32767 Then Hotkey2 = True
      'If lkey And Rkey = -32768 Then Hotkey2 = True
    End Function你就会发现,如果你按的是ctrl+~,textbox的值是-32767,显示msgbox hide,如果你按的是alt+~textbox的值是-32768,显示msgbox show也就是说按不同的键,GetAsyncKeyState的值不同,而对于alt+~,你的hotkey没有返回true。所以你的hotkey要加上If lkey And Rkey = -32768 Then Hotkey2 = True