我有一个Outlook Addin(Office 2013),其主要作用是打开一个包含WebBrowser的WPF窗口,该窗口嵌入了特定的业务Web应用程序。我已经不得不解决几个问题,WPF WebBrowser没有接收到特定的击键,如输入,删除,ctrl + c,ctrl-v等。但是这可以通过这里描述的方法成功处理:https://blogs.msdn.microsoft.com/vsod/2010/04/08/using-shortcut-keys-to-call-a-function-in-an-office-add-in/。
这些问题至少是一致的。我面临的最后一个涉及空格键。通常,空间被视为与其他字母数字键类似,并且不需要拦截。然而,在所有情况下都不是这样。每当用户将Outlook集中在特定的电子邮件上时(通过聚焦我不是指在导航窗格中选择电子邮件,而是在右侧主窗格中单击电子邮件的正文),然后Outlook使用空格键作为导航快捷方式。这样,用户就可以浏览电子邮件内容并切换到下一封电子邮件。
用户在关注右窗格后打开我的Addin WPF窗口并使用HTML框提供包含空格的文本时出现问题。在那种状态下,Outlook仍然在下面的Outlook资源管理器中导航,“窃取”空格键命中,即使WPF窗口是活动的,而不是Outlook资源管理器。这意味着Web App永远不会收到空间。只有当用户从当前电子邮件中“失去焦点”时,即使通过单击导航窗格中当前显示的电子邮件,Outlook似乎也会释放空格键上的所有权,并且它会再次按预期工作。
我看到了2个潜在的问题解决方案:
每当激活Addin WPF窗口时,强制Outlook资源管理器从右侧主窗格中当前显示的电子邮件中失去焦点。我还没有找到实现它的方法。
拦截空间并触发预定义的javascript方法来注入空间。然而这很棘手,因为在空格键正常工作的情况下,我的Addin将获得2个空格 - 一个通过简单地接收空格键击中而第二个通过注入。
任何想法如何解决这个问题?
干杯
答案 0 :(得分:0)
在新主题中打开WPF窗口。 通过这种方式,所有按键如ctrl-c ctrl -v ctrl-a输入删除选项卡和空格键都可以。
Thread newWindowThread = new Thread(new ThreadStart(() =>
{
MyWindow window = new MyWindow();
window.Show();
System.Windows.Threading.Dispatcher.Run();
}));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();