首页 文章

Outlook从Addin拥有的WPF窃取空格键

提问于
浏览
1

我有一个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似乎也会释放空格键上的所有权,并且它会再次按预期工作 .

我看到了两个潜在的问题解决方案:

  • 每当激活Addin WPF窗口时,强制Outlook资源管理器从右侧主窗格中当前显示的电子邮件中失去焦点 . 我还没有找到实现它的方法 .

  • 拦截空间并触发预定义的javascript方法以注入空间 . 然而这很棘手,因为在空格键正常工作的情况下,我的Addin将获得2个空格 - 一个通过简单地接收空格键击中而第二个通过注入 .

任何想法如何解决这样的问题?

干杯

1 回答

  • 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();
    

相关问题