在Excel中VSTO胡克ALT键加载

问题描述 投票:0回答:1

我需要的解决方案是99%,封装在接受的解决方案链接如下:

How to perform .Onkey Event in an Excel Add-In created with Visual Studio 2010?

然而,这似乎并没有用于钩住ALT键工作。我环顾四周,所遇到的几个C#的例子,但我是新来的编程和我学习VB .NET所以用我的知识水平我一直无法到港其他C#成功例子的代码,使其在工作,我VB .NET项目。

由于上面链接的代码已经做的一切,我需要,我想继续使用它,但我会很感激,如果有人能告诉我如何让它也勾ALT键。我想有一个需要通过并以特定的方式检查,但我一直没能找到,因为该解决方案弄明白在过去的4天不变。任何帮助都感激不尽。

万分感谢!

编辑:@Vincent,这里是我用同溢出错误破坏测试的代码:

Imports InputHelperLib

Public Class ThisAddIn

Dim KeyboardHook As InputHelper.Hooks.LocalKeyboardHook

Private Sub ThisAddIn_Startup() Handles Me.Startup
    KeyboardHook = New InputHelper.Hooks.LocalKeyboardHook
    AddHandler KeyboardHook.KeyDown, AddressOf KeyboardHook_KeyDown
    AddHandler KeyboardHook.KeyUp, AddressOf KeyboardHook_KeyUp
End Sub

Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
    If KeyboardHook IsNot Nothing Then KeyboardHook.Dispose()
End Sub

Private Sub KeyboardHook_KeyDown(sender As Object, e As InputHelper.Hooks.KeyboardHookEventArgs)
    If e.Modifiers = InputHelper.ModifierKeys.Alt AndAlso e.KeyCode = System.Windows.Forms.Keys.M Then
        System.Windows.Forms.MessageBox.Show("ALT + M was pressed!")
    End If
End Sub

Private Sub KeyboardHook_KeyUp(sender As Object, e As InputHelper.Hooks.KeyboardHookEventArgs)
    If e.Modifiers = InputHelper.ModifierKeys.Alt AndAlso e.KeyCode = System.Windows.Forms.Keys.M Then
        System.Windows.Forms.MessageBox.Show("ALT + M was released!")
    End If
End Sub
End Class
.net vb.net vsto
1个回答
0
投票

在这个问题的答案的代码是不是完全有效的,不使用确定改性剂的最佳方法。

由于标准的,低级别的键盘钩子没有工作,我添加了一个LocalKeyboardHookInputHelper库,它使用WH_KEYBOARD挂钩,而不是WH_KEYBOARD_LL的。不同的是,WH_KEYBOARD需要你,你要挂钩的每个进程注入一个DLL,并指定一个线程。幸运的是,因为你正在使用VSTO插件,InputHelper已经被加载到Excel进程与外接一起。

编译DLL可以在我的项目发布区下载: https://github.com/Visual-Vincent/InputHelper/releases

(您也可以直接从库中下载InputHelper.vb源文件)

用法示例:

Imports InputHelperLib

Public Class ThisAddIn

    Dim KeyboardHook As InputHelper.Hooks.LocalKeyboardHook

    Private Sub ThisAddIn_Startup() Handles Me.Startup
        KeyboardHook = New InputHelper.Hooks.LocalKeyboardHook
        AddHandler KeyboardHook.KeyDown, AddressOf KeyboardHook_KeyDown
        AddHandler KeyboardHook.KeyUp, AddressOf KeyboardHook_KeyUp
    End Sub

    Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
        If KeyboardHook IsNot Nothing Then KeyboardHook.Dispose()
    End Sub

    Private Sub KeyboardHook_KeyDown(sender As Object, e As InputHelper.Hooks.KeyboardHookEventArgs)
        If e.Modifiers = InputHelper.ModifierKeys.Alt AndAlso e.KeyCode = System.Windows.Forms.Keys.M Then
            System.Windows.Forms.MessageBox.Show("ALT + M was pressed!")
        End If
    End Sub

    Private Sub KeyboardHook_KeyUp(sender As Object, e As InputHelper.Hooks.KeyboardHookEventArgs)
        If e.Modifiers = InputHelper.ModifierKeys.Alt AndAlso e.KeyCode = System.Windows.Forms.Keys.M Then
            System.Windows.Forms.MessageBox.Show("ALT + M was released!")
        End If
    End Sub
End Class
© www.soinside.com 2019 - 2024. All rights reserved.