2010-01-15 3 views
1

Je veux pouvoir maintenir une touche enfoncée pendant le chargement de l'application et en fonction de ce qui est maintenu enfoncé, un certain formulaire est affiché.get keydown sur application/formulaire charger dans vb.net

Par exemple maintenant changement et l'ouverture itunes ouvre

une petite boîte de dialogue vous permettant de définir la bibliothèque (ou quelque chose) je peux vérifier si sont détenus le décalage/Ctrl/Alt enfoncée, mais je préférerais utilise les lettres/chiffres.

Comme cale 1 vers le bas pour ouvrir Form1 et maintenez-2 vers le bas pour ouvrir le formulaire 2.

+0

Est-ce l'application VB.NET lancement des autres processus (par exemple iTunes)? – Jay

+0

pas l'itunes était un exemple d'un programme qui fait ce que je veux que le mien fasse. Il ne lance aucun processus. –

Répondre

2

Si vous êtes désireux de le faire sur WinForms traditionnels, vous pouvez consulter cet article:

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

A mi-chemin vers le bas, il y a une classe abstraite de clavier qui utilise un appel système pour obtenir des états clés. Vous pourriez vouloir essayer.

EDIT: Voici la classe convertie en VB.NET. Je ne l'ai pas testé donc il pourrait y avoir quelques erreurs. Faites le moi savoir.

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 

Donc, une fois que vous ajoutez cette classe à votre projet, vous pouvez faire quelque chose comme ceci:

' See if the 1 button is being held down 
If Keyboard.IsKeyDown(Keys.D1) Then 
    ' Do the form showing stuff here 
EndIf 
+0

merci, connaissez-vous un exemple vb, je peux comprendre les bases de C#, mais une partie de la conversion est plus difficile à obtenir. –

+0

Donnez-moi quelques minutes et je vais convertir cela en VB pour vous. –

+0

merci beaucoup :) –

1

Si vous utilisez WPF, vous pouvez utiliser la méthode Keyboard.GetKeyStates pour déterminer l'état d'un Key individuel. Par exemple

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

Plus d'info:

EDIT

Pour WinForms la solution est un peu plus difficile. Il n'y a aucune méthode exposée que je connaisse qui vous donnera l'état exposé dans un Key enum. Au lieu de cela, vous devrez PInvoke dans la méthode Win32 GetKeyState.

<DllImport("user32.dll", CharSet:=CharSet.Auto, ExactSpelling:=True)> _ 
Public Shared Function GetKeyState(ByVal keyCode As Integer) As Short 
End Function 

Pour la plupart des clés du résultat doit être directement convertible d'une valeur Key.

If NativeMethods.GetKeyState(CInt(Key.D1)) < 0 Then 
    ' 1 is held down 
End If 
+0

Je n'utilise pas WPF, c'est Windows Forms –