父窗口拦截加速器

时间:2009-06-18 16:43:33

标签: c# wpf winapi vsto

我有一个窗口,我已经放入另一个应用程序。在这种情况下,我有一个自定义应用程序,我注入到Outlook 2003窗口。

我遇到一个问题,即当我按下应用程序中的退格键时,父窗口(本例中为Outlook)正在收到WM_COMMAND消息。从我有限的Win API经验来看,这似乎表明父母认为退格键是一个加速器,并且在我的应用程序可以看到之前处理它。

我正在尝试使用LoadAccelerators函数来尝试获取Outlook加速器表,但我不知道如何获取父窗口的表。

有什么想法吗?

编辑: 当我点击退格键时,这是spy ++的输出:

WM_COMMAND wNotifyCode:1(从加速器发送)wID:1405

我注意到,当按下退格键时,我的文本框会获得WM_KEYDOWN。这是该消息的Spy ++行:

P WM_KEYDOWN nVirtKey:VK_BACK c重复:1 ScanOcde:0EfExtended:0fAltDown:0fRepeat:0fUp:0

感谢。

1 个答案:

答案 0 :(得分:0)

您是否将代码注入Outlook流程?听起来很邪恶......无论如何,加速器表实际上并没有与窗口相关联。它们由应用程序的消息泵处理(请参阅TranslateAccelerator函数)。我想说你最好的选择是使用消息钩子。如果您看到针对您的窗口的删除键消息,请将另一条私人消息发布到您的窗口并吃掉原始消息,以便Outlook看不到它。