Word VSTO插件的快捷键

3
我尝试使用钩子方法作为Word插件中的快捷键,就像我在这里找到的Using shortcut keys to call a function in an Office Add-in。虽然这个方法可以调用我的函数,但是它会将快捷键的字母/数字写入文档中。所以如果我的快捷键是ctrl + 2,它会在我的方法运行后在文档中写入“2”。真正奇怪的是,如果你在Word中加载插件时按下ctrl + 2,它不会在文档中写入“2”,所以我不知道为什么运行插件时会出现这种情况。有人知道如何解决这个问题或者有其他Word VSTO插件快捷键的方法吗?我正在使用VS 2012编写我的插件,并且使用Word 2010。

1
每次都在调用 return (int)CallNextHookEx(_hookID, nCode, wParam, lParam),所以 Keydown 事件会冒泡到其他监听器(比如文档)。如果你不希望事件继续发布,请尝试返回 1。 - Matthias Müller
非常感谢Matthias。它有效。作为一个额外的问题,C#告诉我不应该再使用AppDomain.GetCurrentThreadId(),因为它已经过时了(尽管它似乎仍然可以工作)。我试图用System.Threading.Thread.CurrentThread.ManagedThreadId来替换它,但是这并不起作用(这是MS网站上说它的替代品),你有什么想法吗? - crookie
我会作为答案回复 - Matthias Müller
1个回答

2

我没有收到错误信息,但它就是不工作。所以你可以看到这里对我来说它们给出了不同的结果: ?System.Threading.Thread.CurrentThread.ManagedThreadId 1 ?AppDomain.GetCurrentThreadId() 13168 - crookie
我在这里找到了第二部分的答案https://dev59.com/6XRA5IYBdhLWcg3w8ikl 因此,我能够使用Process.GetCurrentProcess().Threads[0].Id代替,即 _hookID = SetWindowsHookEx(WH_KEYBOARD, _proc, IntPtr.Zero, (uint)Process.GetCurrentProcess().Threads[0].Id); - crookie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接