我需要的解决方案是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
在这个问题的答案的代码是不是完全有效的,不使用确定改性剂的最佳方法。
由于标准的,低级别的键盘钩子没有工作,我添加了一个LocalKeyboardHook
我InputHelper库,它使用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