我使用此示例将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在同一个线程中工作。
答案 0 :(得分:1)
您需要设置WH_GETMESSAGE
hook (SetWindowsHookExW(WH_GETMESSAGE, ...)
)并使用VK_TAB/VK_SPACE/VK_LEFT/VK_RIGHT
/ TranslateMessage
SendMessage
消息转发给您的控件