本帖最后由 zjm499767 于 2012-12-28 18:20:44 编辑

解决方案 »

  1.   

    最简单的办法是download一个VB Hotkey控件。你这个代码根本不对。
      

  2.   

    版主大人。这类控件是不是都要用HOOK类的呢?
      

  3.   

    所谓的“按F12停不了”是什么表现?
    如果是指 Timer 没停,因为你的确没有在 F12 中关 Timer。又1:按键判断有问题。比如
    F10 按下,状态变化,调用 start_Click
    F10 释放,状态变化,又调用 start_Click又2:暂停按钮是什么?
      

  4.   

    中午好!这个程序的选型时这样的,我从网上抄来的,测试下了没有问题后用在我的程序中,
    Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    Dim key1 As Integer, key2 As Integer, key3 As Integer
    Const keycode1 As Integer = 121 '按下【F10】的键码是 121
    Const keycode2 As Integer = 122 '按下【F11】的键码是 122
    Const keycode3 As Integer = 123 '按下【F12】的键码是 123
    Private Sub Form_Load()
    key1 = GetKeyState(keycode1)
    key2 = GetKeyState(keycode2)
    key3 = GetKeyState(keycode3)
    Timer1.Interval = 100
    Timer1.Enabled = True
    'Me.Visible = False '这句根据需要选用
    End Sub
    Private Sub Timer1_Timer()
    If GetKeyState(keycode1) <> key1 Then
    '这里写你需要的开始语句,主程序可以写在另一个过程中,在这里调用就可以了
    MsgBox "启动"
    key1 = GetKeyState(keycode1)
    End If
    If GetKeyState(keycode2) <> key2 Then
    '这里写暂停指令,暂停就是让计时器停止走动,即Timer1.Enabled = False
    MsgBox "暂停"
    key2 = GetKeyState(keycode2)
    End If
    If GetKeyState(keycode3) <> key3 Then
    '这里写停止命令,停止当然就是结束程序,否则跟暂停有什么区别呢
    MsgBox "停止"
    key3 = GetKeyState(keycode3)
    End If
    ========================================================================
    所谓的“按F12停不了”是什么表现?
    如果是指 Timer 没停,因为你的确没有在 F12 中关 Timer。回答:我的本意是按F12后去执行stop_Click(),停止串口,用"end"停止程序。
    ========================================================
    又1回答:这个我的想法是按键状态变化就是跳到start_Click,因为是热键就按一次,抓到释放也好按下也好,都是按键动作,都可以呗。也不知道这想法对不对,但是在上面传的原型上吗,可以很好的执行。
    又2回答:这个暂停还没用上,呵呵。
    =================谢谢
      

  5.   

    要避免用 End 语句。
    只需要先停止 Timer,然后 Unload Me。
    MSComm1 会在卸载时自动关闭。按键状态应该是 0 => 1 时按下吧, 1 => 0 的时候可以跳过。