在 VSTO Excel 加载项中挂接 ALT 键
Hook ALT key in VSTO Excel Add-in
我需要的解决方案 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
该答案中的代码并不完全有效,也没有使用确定修饰符的最佳方法。
由于标准的低级键盘挂钩不起作用,我在我的 InputHelper 库中添加了 LocalKeyboardHook
,它使用 WH_KEYBOARD
挂钩而不是 WH_KEYBOARD_LL
.不同的是WH_KEYBOARD
需要你在每个你想hook的进程中注入一个DLL并指定一个线程。幸运的是,由于您使用的是 VSTO 加载项,InputHelper 已与您的加载项一起加载到 Excel 进程中。
编译好的DLL可以在我项目的Release部分下载:
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
我需要的解决方案 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
该答案中的代码并不完全有效,也没有使用确定修饰符的最佳方法。
由于标准的低级键盘挂钩不起作用,我在我的 InputHelper 库中添加了 LocalKeyboardHook
,它使用 WH_KEYBOARD
挂钩而不是 WH_KEYBOARD_LL
.不同的是WH_KEYBOARD
需要你在每个你想hook的进程中注入一个DLL并指定一个线程。幸运的是,由于您使用的是 VSTO 加载项,InputHelper 已与您的加载项一起加载到 Excel 进程中。
编译好的DLL可以在我项目的Release部分下载:
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