Outlook 插件 (VSTO) - 在范围的函数 InsertAfter 之后将焦点设置回编辑器
Outlook plugin (VSTO) - Set focus back to editor after range's function InsertAfter
我的 outlook 插件 (FormRegion) 按需将文本插入邮件正文(用户单击按钮)- 文本由 "InsertAfter" 函数(Range 的函数)插入。
单击后,焦点位于按钮上,因此用户需要在编辑器中单击返回才能继续编写。
如何将焦点设置回编辑器?
谢谢。
您可以尝试使用 Word 对象模型中文档 class 的 Activate 方法。
或者只使用 SetFocus 函数将键盘焦点设置到指定的 window。 window 必须附加到调用线程的消息队列。
SetFocus
函数向失去键盘焦点的 window 发送一条 WM_KILLFOCUS
消息,向接收键盘焦点的 window 发送一条 WM_SETFOCUS
消息键盘焦点。它还会激活接收焦点的 window 或接收焦点的 window 的父级。
您需要找到编辑器控件的 HWND 并调用 SetActiveWindow
/ SetFocus
/ ShowCaret
Windows API 函数。如果你 运行 进程外(不是你的情况),事情会变得更有趣。
如果使用 Redemption (I am its author) is an option, it exposes the SafeInspector 对象和 SafeInspector.FocusEditor
方法。
在尝试了所有可能的解决方案后,我注意到在启动消息框\新表单时邮件正文失去了焦点,而当它关闭时 - 焦点又回到了邮件正文。
所以我想出了一些肮脏的解决方法 - 我创建了一个不透明度为 0% 的新表单,它在几毫秒后关闭,这样焦点就会立即回到邮件正文。
脏,但效果很好。
我的 outlook 插件 (FormRegion) 按需将文本插入邮件正文(用户单击按钮)- 文本由 "InsertAfter" 函数(Range 的函数)插入。 单击后,焦点位于按钮上,因此用户需要在编辑器中单击返回才能继续编写。
如何将焦点设置回编辑器?
谢谢。
您可以尝试使用 Word 对象模型中文档 class 的 Activate 方法。
或者只使用 SetFocus 函数将键盘焦点设置到指定的 window。 window 必须附加到调用线程的消息队列。
SetFocus
函数向失去键盘焦点的 window 发送一条 WM_KILLFOCUS
消息,向接收键盘焦点的 window 发送一条 WM_SETFOCUS
消息键盘焦点。它还会激活接收焦点的 window 或接收焦点的 window 的父级。
您需要找到编辑器控件的 HWND 并调用 SetActiveWindow
/ SetFocus
/ ShowCaret
Windows API 函数。如果你 运行 进程外(不是你的情况),事情会变得更有趣。
如果使用 Redemption (I am its author) is an option, it exposes the SafeInspector 对象和 SafeInspector.FocusEditor
方法。
在尝试了所有可能的解决方案后,我注意到在启动消息框\新表单时邮件正文失去了焦点,而当它关闭时 - 焦点又回到了邮件正文。
所以我想出了一些肮脏的解决方法 - 我创建了一个不透明度为 0% 的新表单,它在几毫秒后关闭,这样焦点就会立即回到邮件正文。
脏,但效果很好。