Outlook插件(VSTO) - 在范围的函数InsertAfter之后将焦点设置回编辑器

时间:2016-12-13 14:45:46

标签: outlook vsto outlook-addin

我的Outlook插件(FormRegion)按需将文本插入邮件正文(用户单击按钮) - 文本由“InsertAfter”函数(Range函数)插入。 单击后,焦点位于按钮上,因此用户需要在编辑器中单击以继续写入。

如何将焦点设置回编辑器?

谢谢。

3 个答案:

答案 0 :(得分:1)

在尝试了所有可能的解决方案之后,我注意到邮件正文在启动messagebox \ new form时丢失了焦点,当它关闭时 - 焦点又回到了邮件正文。

所以我提出了一些肮脏的解决方法 - 我创建了一个0%不透明度的新表单,它在几毫秒后关闭,这样就可以立即将重点放回邮件正文。

很脏,但效果很好。

答案 1 :(得分:0)

您可以尝试使用Word对象模型中的Document类的Activate方法。

或者只使用SetFocus功能将键盘焦点设置为指定窗口。该窗口必须附加到调用线程的消息队列。

SetFocus函数向失去键盘焦点的窗口发送WM_KILLFOCUS消息,并向接收键盘焦点的窗口发送WM_SETFOCUS消息。它还会激活接收焦点的窗口或接收焦点的窗口的父窗口。

答案 2 :(得分:0)

您需要找到编辑器控件的HWND并调用SetActiveWindow / SetFocus / ShowCaret Windows API函数。如果你在流程外(不是在你的情况下),事情会变得更有趣。

如果使用Redemption是一个选项,则会公开SafeInspector对象和SafeInspector.FocusEditor方法。