アプリケーションの読み込み中にキーを押したままにしたいのですが、押したキーに応じて特定のフォームが表示されます。
たとえば、Shift キーを押しながら iTunes を開くと小さなダイアログが開き、ライブラリ (または何か) を設定できます。
Shift/Ctrl/Alt が押されているかどうかを確認できますが、文字/数字を使用したいと思います。
1 を押し続けるとフォーム 1 が開き、2 を押し続けるとフォーム 2 が開きます。
アプリケーションの読み込み中にキーを押したままにしたいのですが、押したキーに応じて特定のフォームが表示されます。
たとえば、Shift キーを押しながら iTunes を開くと小さなダイアログが開き、ライブラリ (または何か) を設定できます。
Shift/Ctrl/Alt が押されているかどうかを確認できますが、文字/数字を使用したいと思います。
1 を押し続けるとフォーム 1 が開き、2 を押し続けるとフォーム 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
列挙型で公開された状態を提供する、私が知っている公開されたメソッドはありません。代わりに、Win32 GetKeyState メソッドに PInvoke する必要があります。
<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