получить ключ при загрузке приложения / формы в vb.net - PullRequest
1 голос
/ 16 января 2010

Я хочу, чтобы можно было удерживать клавишу во время загрузки приложения и в зависимости от того, какое нажатие удерживается, отображается определенная форма.

Например, удерживая нажатой клавишу shift и открывая itunes, открывается небольшой диалог, позволяющий установить библиотеку (или что-то еще)

Я могу проверить, удерживаются ли shift / Ctrl / Alt, но я бы предпочел использовать буквы / цифры.

Например, удерживайте 1, чтобы открыть форму 1, и удерживайте 2, чтобы открыть форму 2.

Ответы [ 2 ]

2 голосов
/ 16 января 2010

Если вы хотите сделать это на традиционных winforms, вы можете проверить эту статью:

http://www.switchonthecode.com/tutorials/winforms-accessing-mouse-and-keyboard-state

Примерно на полпути есть абстрактный класс Keyboard, который использует системный вызов для получения состояний клавиш. Возможно, вы захотите попробовать.

РЕДАКТИРОВАТЬ: Вот этот класс преобразован в 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
1 голос
/ 16 января 2010

Если вы используете WPF, вы можете использовать метод Keyboard.GetKeyStates для определения состояния отдельного человека Key. Например

If KeyBoard.GetKeyStates(Key.D1) = KeyStates.Down Then
  ' Open Form1
End If

Подробнее:

EDIT

Для 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
...