请问|VB.NET如果检测键盘上同时按下了多个键
比如同时按下了 上键和左键 --------------------编程问答-------------------- GetAsyncKeyState可以,不过是windows API,需要Platform invoke.估计net 类库里面应该有函数 --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark --------------------编程问答-------------------- mark --------------------编程问答-------------------- --------------------编程问答-------------------- mark????没详细资料了? --------------------编程问答-------------------- 不可能同时按吧,总有点时间差距啦,windows应该分先后把它们放到消息队列中吧!!! --------------------编程问答-------------------- 二位数一个,你把他的长度除以2就行了,
--------------------编程问答-------------------- 楼上各位的方法我没测试过。不过我曾尝试做过这功能,最终是用这个api实现的。
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
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