鼠标键挂钩 - 键侦听器未触发

Posted

技术标签:

【中文标题】鼠标键挂钩 - 键侦听器未触发【英文标题】:Mouse Key Hook - Key listener not firing 【发布时间】:2015-08-20 13:30:52 【问题描述】:

我正在使用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;
        
    

【问题讨论】:

你试过Hook.AppEvents()而不是Hook.GlobalEvents()吗? 我没有,这有效,关键监听器现在触发。但是鼠标侦听器没有。我可以通过两个钩子,一个全局的一个应用程序来解决这个问题。谢谢您的帮助!随意添加这个作为答案,我会标记它。否则,我会在问题中添加详细信息,以帮助遇到此问题的其他人。 这看起来很奇怪,但其实没那么多……实际上,键盘有一个焦点,所以如果它在你的应用程序上,可能全局钩子无法获取输入;至于鼠标,它没有焦点,因此应用程序挂钩将无法获取其输入。这只是一个疯狂的猜测。 或者,你知道,我不再说废话了,***.com/questions/30326187/… 【参考方案1】:

发布我使用的解决方案,以防对其他人有所帮助。所有功劳归功于 Kilazur(见 cmets)。这不是一个完美的解决方案,但它确实有效......

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

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

我使用Hook.GlobalEvents() 作为鼠标监听器,Hook.AppEvents() 作为按键监听器。

【讨论】:

以上是关于鼠标键挂钩 - 键侦听器未触发的主要内容,如果未能解决你的问题,请参考以下文章

鼠标侦听器不会引发错误但不会触发(java)

需要时未触发鼠标左键向上

防止焦点 div 使用箭头键滚动

JS中常用的一些事件(触发方法)

在 Java 中使用组合键

Spring boot OAuth成功登录侦听器未触发