2017-06-13 1 views
1

Ich lerne über Tastatur-Hooks in VB.NET und brauche Hilfe mit einem Fehler. Zuerst sagte er mir, dass ich ändern muss (nicht (KeyDown) ist nichts) & KeyUp zu RaiseEvent, weil sie Ereignisse sind, die ich getan habe. Aber jetzt sagt es mir einen ')' Ausdruck wird erwartet, und ich habe keine Ahnung, was das bedeutet. Ich habe es bis jetzt mit VB.NET Wikis und Codeschnipsel gemacht und bin ziemlich stolz auf mich. Ich will nicht, dass das jetzt floppt. Bitte helfen Sie! Es gibt ein Bild des Fehlers ganz unten.VB.NET RaiseEvent nach Ausdruck fragen

Public Event KeyDown As KeyboardHookCallback 

    Public Event KeyUp As KeyboardHookCallback 
Private Function HookFunc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr 
     If (nCode >= 0) Then 
      Dim iwParam As Integer = wParam.ToInt32 
      If ((iwParam = WM_KEYDOWN) _ 
     OrElse (iwParam = WM_SYSKEYDOWN)) Then 
       If (Not RaiseEvent KeyDown Is Nothing) Then 
        RaiseEvent KeyDown(CType(Marshal.ReadInt32(lParam), VKeys)) 
       End If 

      End If 

      If ((iwParam = WM_KEYUP) _ 
    OrElse (iwParam = WM_SYSKEYUP)) Then 
       If (Not RaiseEvent KeyUp Is Nothing) Then 
        RaiseEvent KeyUp(CType(Marshal.ReadInt32(lParam), VKeys)) 
       End If 

      End If 

     End If 

     Return CallNextHookEx(hookID, nCode, wParam, lParam) 
    End Function 

Image of the error

+0

1) Ein Ausdruck ist etwas, das einen Wert hat, zum Beispiel 5, oder 'x + y'. 2) Ich * vermute *, dass Sie versuchen herauszufinden, ob ein Event-Handler mit dem KeyUp-Ereignis verbunden ist. Ich schlage vor, dass Sie Ihren Code arbeiten, bevor Sie zusätzliche Funktionen wie diese hinzufügen. –

+0

Es sieht wie ein Versuch aus, C# -Code zu übersetzen. Löschen Sie die If-Anweisung, sie ist weder richtig noch notwendig. Einfach nur RaiseEvent erledigt den Job. –

+0

Die Microsoft-Dokumentation [Visual Basic Coding Conventions] (https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/program-structure/coding-conventions) besagt ausdrücklich: "Überprüfe nicht, ob Ein Ereignis ist Nothing (null), bevor Sie die RaiseEvent-Methode aufrufen. RaiseEvent prüft auf Nothing, bevor das Ereignis ausgelöst wird. " –

Antwort

1

Sie sollten einfach nur erhöhen das Ereignis .. Wenn es etwas, um es zu hören ist, wird es laufen. Wenn nicht, wird kein Schaden angerichtet.

Public Event KeyDown As KeyboardHookCallback 
Public Event KeyUp As KeyboardHookCallback 

Private Function HookFunc(ByVal nCode As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr 
    If (nCode >= 0) Then 
     Dim iwParam As Integer = wParam.ToInt32 
     If ((iwParam = WM_KEYDOWN) OrElse (iwParam = WM_SYSKEYDOWN)) Then 
      RaiseEvent KeyDown(CType(Marshal.ReadInt32(lParam), VKeys)) 
     End If 

     If ((iwParam = WM_KEYUP) OrElse (iwParam = WM_SYSKEYUP)) Then 
      RaiseEvent KeyUp(CType(Marshal.ReadInt32(lParam), VKeys)) 
     End If 

    End If 
    Return CallNextHookEx(hookID, nCode, wParam, lParam) 
End Function