2015-08-20 160 views
1

我使用Global MouseKeyHook來聽取鼠標點擊和按鍵,同時在VLC activeX控件中播放視頻。鼠標點擊偵聽器觸發很好,並按預期工作。但關鍵的按下/收聽者不會觸發。我附上了一些下面的代碼,任何幫助將不勝感激。鼠標鑰匙扣 - 鑰匙聽者沒有觸發

訂閱事件

public void playVideo(string videoPath, bool loop) 
    { 
     stopTriggered = false; 

     this.loop = loop; 
     this.videoPath = videoPath; 
     this.WindowState = FormWindowState.Normal; 
     this.BringToFront(); 

     m_GolbalHook = Hook.GlobalEvents(); 
     m_GolbalHook.MouseClick += m_GolbalHook_MouseClick; 
     m_GolbalHook.KeyDown += m_GolbalHook_KeyDown; 

     axVLCPlugin21.Focus(); 
     axVLCPlugin21.playlist.items.clear(); 
     axVLCPlugin21.playlist.add("file:///" + videoPath); 
     axVLCPlugin21.AutoLoop = loop; 
     axVLCPlugin21_Pos = ScreenPositons.Screen1_Start; 

     axVLCPlugin21.playlist.play(); 
    } 

事件觸發代碼

private void m_GolbalHook_KeyDown(object sender, KeyEventArgs e) 
    { 
     //Not triggering at the moment 
     switch (e.KeyCode) 
     { 
      case Keys.Right: 
       shiftRight(); 
       break; 
      case Keys.Left: 
       shiftLeft(); 
       break; 
     } 
    } 
+0

您是否試過'Hook.AppEvents()'而不是'Hook.GlobalEvents()'? – Kilazur

+0

我沒有,而且那個作品,關鍵的聽衆現在開火了。但鼠標聽衆不會。我可以通過兩個鉤子,一個全球一個應用程序來解決這個問題。 感謝您的幫助!隨意添加這個作爲答案,我會標記它。否則,我會爲該問題添加詳細信息,以幫助任何有此問題的人。 – Sandwich

+0

這看起來很奇怪,但不是那麼多......實際上,鍵盤有一個焦點,所以如果它在你的應用程序上,那麼全局鉤子可能無法獲得輸入;至於鼠標,它沒有焦點,所以應用程序鉤子在獲取輸入時會遇到困難。這只是一個瘋狂的猜測。 – Kilazur

回答

0

發佈我所用的溶液,在情況下,它可以幫助別人。所有功勞歸於Kilazur(見評論)。這不是一個完美的解決方案,但它的工作原理...

m_GolbalHook = Hook.GlobalEvents(); 
m_GolbalHook.MouseClick += m_GolbalHook_MouseClick; 

m_AppHook = Hook.AppEvents(); 
m_AppHook.KeyDown += m_AppHook_KeyDown; 

我使用Hook.GlobalEvents()的鼠標偵聽器,並Hook.AppEvents()的關鍵聽衆。