2015-08-20 119 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()的关键听众。