当前位置:编程学习 > C#/ASP.NET >>

请问|VB.NET如果检测键盘上同时按下了多个键

比如同时按下了 上键和左键  --------------------编程问答-------------------- GetAsyncKeyState可以,不过是windows API,需要Platform invoke.
估计net 类库里面应该有函数 --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark --------------------编程问答-------------------- --------------------编程问答-------------------- mark????没详细资料了? --------------------编程问答-------------------- 不可能同时按吧,总有点时间差距啦,windows应该分先后把它们放到消息队列中吧!!! --------------------编程问答-------------------- 二位数一个,你把他的长度除以2就行了,

   Private Sub Form1_PreviewKeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles Me.PreviewKeyDown
        Label3.Text += e.KeyValue.ToString
    End Sub
--------------------编程问答-------------------- 楼上各位的方法我没测试过。不过我曾尝试做过这功能,最终是用这个api实现的。
GetKeyboardState

Imports System
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Module Module1
Sub Main()
Dim state As New KeyBoardState(CType(Keys.NumLock, Integer))
Console.WriteLine(state.KeyState)
End Sub
End Module

Public Class KeyBoardState
Declare Function GetKeyboardState Lib "user32" Alias "GetKeyboardState" (ByVal pbKeyState() As Byte) As Long
Private KeyCode As Integer

Public Sub New(ByVal keycode As Integer)
Me.KeyCode = keycode
End Sub

Public Function KeyState() As Boolean
Dim state(256) As Byte
GetKeyboardState(state)
return (iif(state(me.KeyCode) = 1, true, false))
End Function
End Class


以上代码未经本人验证,来源:VB.NET Custom Class - Key State (Caps, NumLock, etc..) --------------------编程问答-------------------- state对应的是255个虚键码的ascii编码,如果你想知道a有没有按下,就看state(97)是不是1.以此类推。 --------------------编程问答-------------------- 接楼上的.
Virtual-Key Codes :
http://msdn.microsoft.com/en-us/library/ms645540(VS.85).aspx

另外,如果想监控任何窗口按下的按键,需要用全局键盘钩子. --------------------编程问答-------------------- 我也接楼上的.
另外,如果想监控任何窗口按下的按键,需要用全局键盘钩子.
------------------------------------------------
如果只是本程序里的,其实不用,添加一个IMessageFilter的对象,然后过滤2个消息:
WM_KEYDOWN
WM_SYSKEYDOWN
就可以了。
Keys k = (Keys)wParam;
判断这个k就是你要的键盘值了,应该是能取到所有的包括left-win,right-alt之类的,很详细。

我并不想抬杠,我认为钩子是很好的东西,但是就怕弄不好出问题,并且会处理掉别的程序激活时的快捷键,与其这样不如直接用RegistHotKey了。
^_^
--------------------编程问答-------------------- 长见识了
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,