【问题标题】:VSTO add-in: Find Monitor where Outlook is displayedVSTO 加载项:查找显示 Outlook 的监视器
【发布时间】:2021-02-27 17:24:04
【问题描述】:

大家好。

我所有的用户都有 2 台显示器。我有一个 VSTO Outlook 插件,它基本上是一个功能区按钮和一个表单。如果单击我的功能区按钮,我将创建并显示一个新表单。我不希望我的表单显示在显示 Outlook 的同一监视器上。我想在另一台显示器上打开它。这是我通常在普通 winforms 应用程序中所做的:

        Screen[] allScreens = Screen.AllScreens;            

        int i = allScreens.Count<Screen>();

        if (i > 1)
        {
            foreach (Screen s in allScreens)
            {
                if (s.DeviceName != Screen.FromControl(this).DeviceName)
                {
                    myForm.Location = s.WorkingArea.Location;
                    myForm.maximise = true;
                    myForm.Show();
                }
            }
        }
        else
        {
            this._outlookAuths.Show(this);
        }

但是在 Ribbon 类中工作时没有“this”指针。我试图获取显示功能区按钮的监视器,但它不是普通 winforms 按钮类的一部分。试图获取我的表单的父级,它应该是 MS Outlook,但返回 null。顺便说一句,我表单上的 CentreParent 属性也不起作用,但 CentreParent 与我想要的相反。提前致谢。

【问题讨论】:

  • 您可以在表单显示之前检查和更改屏幕。

标签: c# winforms outlook vsto outlook-addin


【解决方案1】:

请改用Screen.FromHandle。您可以通过将ExplorerInspector OOM 对象投射到IOleWindow 接口并调用IOleWindow.GetWindow 来检索Outlook 窗口的HWND

根据您对“显示 Outlook 的位置”的定义,使用 Application.ActiveWindow / ActiveExplorer / ActiveInspector

【讨论】:

  • 如果回复回答了您的问题,请将其标记为此类。谢谢!
猜你喜欢
  • 2018-05-07
  • 2017-10-19
  • 2017-11-04
  • 2021-03-01
  • 2014-05-10
  • 2015-12-17
  • 1970-01-01
  • 1970-01-01
  • 2022-05-17
相关资源
最近更新 更多