大家好.请教个问题.VB中如何判断某键的状态是被按下或者弹起了.
应该不是在窗体的KeyDown事件中.是要全局判断的.
例如 这样: 
使用了 TIMER 控件 
if key F1 KeyDown then ....

解决方案 »

  1.   

    要完成这个功能你可以用一个API函数,GetKeyState()
    打个比方说你要判断“A”这个键的状态用VB的代码可以这样写
    dim result as long 
    dim keycodenu as long 
    keycodenu =ascii(A)
    result =GetKeyState(keycodenu)
    if result =1 then 
    msgbox"‘A键处于被按下状态’",vbokonly,"The state of the specified key"
    else
    msgbox"'A未被按下'",vbokonly,"The state of the specified key"
    end if 
    不知道对不对希望对你有帮助
      

  2.   

    对了,不好意思,刚看到你说的是全局的,这个问题稍微有点复杂了,你的全局指的是当前进程还是说整个计算机处于开机状态下的全局呢,也就是说无论哪个进程是活动的呢还是只要当前进程处于活动状态呢?如果只是在当前进程,这个还好说你可以钩子函数,如果是无论在哪个进程处于活动状态下的话就有点麻烦了,你要写全局钩子,由于写全局钩子要用到DLL文件,而VB不适合写DLL(我还没有找到有效的方法,希望高手能指点)所以用VB来解决这个问题就有点力不从心了
      

  3.   

    网上一抓一大吧,老马老魏都有:
    http://www.m5home.com/blog/article.asp?id=183
    http://blog.csdn.net/Modest/archive/2006/10/21/1344213.aspx
      

  4.   

    Option Explicit
    Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Long
    Private Sub Form_Load()
       Timer1.Interval = 10: Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
       If GetAsyncKeyState(vbKeyF1) Then Me.Caption = "F1 被按下了"
       If GetAsyncKeyState(vbKeyF2) Then Me.Caption = "F2 被按下了"
       If GetAsyncKeyState(vbKeyF3) Then Me.Caption = "F3 被按下了"
    End Sub