【问题标题】:Is there a reason MailItem.Display method's z-order behaviour varies across machines?MailItem.Display 方法的 z 顺序行为因机器而异是否有原因?
【发布时间】:2014-01-29 20:08:55
【问题描述】:

我们发现调用

myMailItem.Display(false)

方法在我们的开发机器上运行良好,因为它在用户的前台打开消息窗口。无论我们是在 VS 中运行/附加调试器还是仅作为已安装的应用程序运行。

但是,在某些客户的机器上,消息会在我们的 Winforms 应用程序后面打开。

Windows 的版本似乎没有任何区别。

这是可以解释和预测的吗?

当然,我们可以尝试设置 SetForegroundWindow,但我更希望能够理解差异的原因并在我们的开发机器上重现“问题”,然后再盲目地尝试 SetForegroundWindows 等。

【问题讨论】:

    标签: .net windows winforms outlook mailitem


    【解决方案1】:

    这是一个很正常的事故。用于显示邮件项目的窗口归另一个进程 Outlook.exe 所有。一个进程是否可以将它自己的一个窗口推到前台是一个废话,Windows 窗口管理器使用的基本启发式方法在this MSDN Library article 中进行了描述。

    在您自己的机器上为此获得一致的重现将是困难的。我在更高版本的 Windows 上观察到的一件事是时间似乎也起作用。应用程序创建窗口所需的时间越长,它无法工作并最终落后于当前前景窗口的可能性就越大。之前已经很常见了,因为输入事件发挥了作用。开发机器的典型问题是它们的马力太大:)

    避免这种情况的唯一一致方法是将您的应用程序编写为 Outlook 加载项,以便您的窗口由与 Outlook 窗口相同的进程和线程拥有。那艘船可能很久以前就航行了。下一个最好的事情是最大化 Outlook 成功的几率,将前台窗口强制为 Outlook 窗口。不幸的是,很难做到,请查看this post 获取代码。使用 Spy++ 检查窗口类名是否仍然准确。并最小化您自己的窗口,使其完全不妨碍 Outlook 窗口,并且不可能获得任何输入事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2023-03-25
      相关资源
      最近更新 更多