2017-06-13 43 views
1

我正在學習VB.NET中的鍵盤鉤子,並且需要錯誤幫助。起初它告訴我我必須改變(不是(KeyDown)沒有)& KeyUp到RaiseEvent,因爲它們是我已經完成的事件。但現在它告訴我一個''''表達是期待的,我不知道這意味着什麼。我已經使用VB.NET維基和代碼片段做到了這一點,我爲自己感到非常自豪。我現在不想讓這個失敗。請幫忙!在最底部有一個錯誤的圖像。VB.NET RaiseEvent詢問表達式

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)表達式是一個有值的東西,例如5或'x + y'。 2)我*懷疑你正在試圖查明是否有與KeyUp事件關聯的事件處理程序。我建議你在嘗試添加這樣的額外功能之前讓你的代碼工作。 –

+0

它看起來像試圖翻譯C#代碼。刪除If語句,它既不正確也不必要。只需簡單的RaiseEvent即可完成工作。 –

+0

Microsoft [Visual Basic編碼約定](https://docs.microsoft.com/zh-cn/dotnet/visual-basic/programming-guide/program-structure/coding-conventions)文檔特別聲明「不驗證是否在調用RaiseEvent方法之前,事件爲Nothing(null).RaiseEvent在引發事件之前檢查Nothing。「 –

回答

1

你應該只是簡單地引發事件。如果有什麼聽它,它將會運行。如果沒有,則不會造成傷害。

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