[VB 2010] Keypress ausserhalb des Forms erkennen

Die aber nicht funktionieren!

Mein Stand ist bis jetzt folgender:

Code:
Public Class Form1
    Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If GetAsyncKeyState(VK_LBUTTON) = -32767 Then
            tester1.Text = "linke maustaste gedrückt!"
        End If
    End Sub
End Class
 
Was meinst du mit "funktioniert nicht"? Kommt eine Fehlermeldung? Oder passiert einfach nichts? Wie hast du VK_LBUTTON definiert?

Auch wenn dich das noch mehr verwirren wird, der Vollständigkeit halber erwähne ich es:
Alternativ kannst du auch einen globalen Maus-Hook installieren.
Siehe zum Beispiel hier für Maus-Hook oder hier für Keyboard-Hook.
Beim Maus-Hook musst du darauf achten, die Konstante WH_MOUSE_LL = 14 zu verwenden, anstatt wie in den meisten Beispielen WH_MOUSE = 7, damit der Hook auch global ist (und nicht nur für deine Anwendung gilt).
 
Okay, jetzt hab ichs!

Code:
Public Class Form1
    Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Keys) As Short
    Public Const VK_LBUTTON As Long = &H1 'Left mouse button

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If GetAsyncKeyState(VK_LBUTTON) <> 0 Then
    tester1.Text = "shift + Lmaus"
End If
End Sub


Jetzt ist noch die Frage offen wie mache ichs das nicht nur einmal geprüft wird sondern ständig ob eine Taste gedrückt wurde?
 
Entweder du machst, wie Shakie angedeutet hat eine Hook und wirst daher vom Betriebssystem informiert oder du machst zum Beispiel einen Timer, der in regelmässigen Abständen prüft, ob die Taste gedrückt ist.
 
Nächstes Problem...

Ich frage ab ob Strg und linke Maus zusammen gedrückt worden sind und möche zählen wie oft das passiert. Wenn ich eine Zählervariable zählen lasse zählt sie aber wie lange Strg und linke Maus gedrückt werden.

Hab schon eine nicht sehr elegante "Lösung"(sehr buggy das ganze)
quasi so:

Code:
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

  If GetAsyncKeyState(VK_CONTROL) <> 0 And GetAsyncKeyState(VK_LBUTTON) <> 0 Then
            zähler = zähler + 1  'zählt hoch so lange beides gedrückt ist
            gedrückt = True
            If zähler > 0 And zähler < 2 Then   
                testzähler = testzähler + 1  'zählt +1 wenn der erste zähler > 0 And < 2 ist
            End If
        Else
            gedrückt = False
            zähler = 0
        End If

        Timer1.Enabled = True
        Timer1.Stop()
        Timer1.Start()
End Sub

Hab schon überlegt den Timer wieder zu Stoppen nur "Timert" er dann nie wieder:rolleyes:


Hat da jemand eine bessere Variante?
 

Neue Beiträge

Zurück