【问题标题】:Word VSTO Addin Shortcut KeysWord VSTO 插件快捷键
【发布时间】:2015-04-13 21:47:33
【问题描述】:

我已经尝试在我的 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。

【问题讨论】:

  • 你每次都在调用 return (int)CallNextHookEx(_hookID, nCode, wParam, lParam) ,所以 Keydown 的事件会被其他监听器冒泡(比如文档)。如果您不希望该事件进一步发布,请尝试返回 1。
  • 非常感谢马蒂亚斯。这样可行。作为一个额外的问题,c# 告诉我我不应该再使用 AppDomain.GetCurrentThreadId() 因为它已经过时了(尽管它似乎仍然有效)。我试图用 System.Threading.Thread.CurrentThread.ManagedThreadId 代替它,但是(这是 MS 网站所说的替代品,但这不起作用。有什么想法我应该在这里做什么?
  • 我会作为答案回复

标签: c# ms-word vsto word-2010


【解决方案1】:

第一个问题: 您每次都在调用 return (int)CallNextHookEx(_hookID, nCode, wParam, lParam) ,因此 Keydown 的事件将冒泡到其他侦听器(如文档)。如果您不希望该事件进一步发布,请尝试返回 1。

关于 ThreadId: 究竟是什么错误?我不确定 VSTO 是如何实现同步上下文处理的,请参见此处:VSTO: invoking on main Excel threadHow can SynchronizationContext.Current of the main thread become null in a Windows Forms application?

【讨论】:

  • 我没有收到错误,它只是不起作用。所以你可以在这里看到他们给我不同的结果: ?System.Threading.Thread.CurrentThread.ManagedThreadId 1 ?AppDomain.GetCurrentThreadId() 13168
  • 我在这里找到了第二部分的答案stackoverflow.com/questions/772354/… 所以我可以使用 Process.GetCurrentProcess().Threads[0].Id 来代替,即 _hookID = SetWindowsHookEx(WH_KEYBOARD, _proc, IntPtr.Zero, (uint)Process.GetCurrentProcess().Threads[0].Id);
猜你喜欢
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多