我希望能够在应用程序加载时按住一个键,并根据被按住的键显示某种形式。
例如按住 shift 并打开 iTunes 会打开一个小对话框,允许您设置库(或其他东西)
我可以检查 shift/Ctrl/Alt 是否被按住,但我更喜欢使用字母/数字。
比如按住1打开Form1,按住2打开Form 2。
我希望能够在应用程序加载时按住一个键,并根据被按住的键显示某种形式。
例如按住 shift 并打开 iTunes 会打开一个小对话框,允许您设置库(或其他东西)
我可以检查 shift/Ctrl/Alt 是否被按住,但我更喜欢使用字母/数字。
比如按住1打开Form1,按住2打开Form 2。
如果您想在传统的 winform 上执行此操作,可以查看这篇文章:
http://www.switchonthecode.com/tutorials/winforms-accessing-mouse-and-keyboard-state
大约一半的地方有一个抽象的键盘类,它使用系统调用来获取键状态。你可能想试一试。
编辑:这是转换为 VB.NET 的类。我没有测试它,所以可能会有一些错误。让我知道。
Imports System
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Public MustInherit Class Keyboard
<Flags()>
Private Enum KeyStates
None = 0
Down = 1
Toggled = 2
End Enum
<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)>
Private Shared Function GetKeyState(ByVal keyCode As Integer) As Short
End Function
Private Shared Function GetKeyState(ByVal key As Keys) As KeyStates
Dim state = KeyStates.None
Dim retVal = GetKeyState(CType(key, Integer))
' if the high-order bit is 1, the key is down
' otherwise, it is up
If retVal And &H8000 = &H8000 Then
state = state Or KeyStates.Down
End If
' If the low-order bit is 1, the key is toggled.
If retVal And 1 = 1 Then
state = state Or KeyStates.Toggled
End If
Return state
End Function
Public Shared Function IsKeyDown(ByVal key As Keys) As Boolean
Return KeyStates.Down = (GetKeyState(key) And KeyStates.Down)
End Function
Public Shared Function IsKeyToggled(ByVal key As Keys) As Boolean
Return KeyStates.Toggled = (GetKeyState(key) And KeyStates.Toggled)
End Function
End Class
因此,一旦将此类添加到项目中,您就可以执行以下操作:
' See if the 1 button is being held down
If Keyboard.IsKeyDown(Keys.D1) Then
' Do the form showing stuff here
EndIf
如果您使用的是 WPF,则可以使用该Keyboard.GetKeyStates
方法来确定个人的状态Key
。例如
If KeyBoard.GetKeyStates(Key.D1) = KeyStates.Down Then
' Open Form1
End If
更多信息:
编辑
对于 WinForms,解决方案有点困难。我知道没有任何公开的方法可以为您提供Key
枚举中的公开状态。相反,您必须 PInvoke 进入 Win32 GetKeyState 方法。
<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> _
Public Shared Function GetKeyState(ByVal keyCode As Integer) As Short
End Function
对于大多数键,结果应该可以直接从Key
值转换。
If NativeMethods.GetKeyState(CInt(Key.D1)) < 0 Then
' 1 is held down
End If