嵌入在Outlook中的WPF控件错过了退格键和空格键

时间:2018-06-11 10:44:11

标签: c# winapi outlook vsto

我使用此示例将WPF控件嵌入到Outlook阅读窗格中: https://code.msdn.microsoft.com/windowsdesktop/Creating-Adjacent-Windows-00090e4a

但在C#中。

我使用的窗口样式

    _hwndSource = new HwndSource(0,
        (int) (WindowStyles.WS_CHILD | WindowStyles.WS_VISIBLE | WindowStyles.WS_TABSTOP | 
               WindowStyles.WS_CLIPCHILDREN),
        (int)WindowStylesEx.WS_EX_CONTROLPARENT, 
        0, 0,
        TopPaneWindowClass, hWndParent);

    View.Loaded += _view_Loaded;
    _hwndSource.RootVisual = View;
    _hwndSource.SizeToContent = SizeToContent.Height;

它很好用,除了我控制中的文本框错过了一些键(SPACE和BACKSPACE) - 它们被转换为outlook邮件列表(在SPACE上它转到下一个项目)。 我试图将钩子添加到HwndSource并处理WM_GETDLGCODE:

_hwndSource.AddHook(ChildHwndSourceHook);

但它没有收到此消息。它接收WM_KEYDOWN和WM_KEYUP消息。但是我怎样才能正确地将它传递给我的WPF控件呢? 另外,我可以看到WM_SETFOCUS,WM_GETOBJECT,WM_NCHITTEST,WM_SETCURSOR和一些代码为C131的消息。

编辑:这是VSTO加载项(inprocess),因此WPF控件与Outlook在同一个线程中工作。

1 个答案:

答案 0 :(得分:1)

您需要设置WH_GETMESSAGE hook (SetWindowsHookExW(WH_GETMESSAGE, ...))并使用VK_TAB/VK_SPACE/VK_LEFT/VK_RIGHT / TranslateMessage

SendMessage消息转发给您的控件