我们发现正在调用
myMailItem.Display(false)
方法在我们的开发机器上运行正常,因为它在用户的前台打开了消息窗口。我们是否在VS /连接调试器或仅作为已安装的应用程序运行。
然而,某些客户'机器消息打开在我们的Winforms应用程序后面。
Windows的版本似乎没有任何区别。
这是可以解释和预测的吗?
当然我们可以设置SetForegroundWindow,但我更愿意理解为什么差异并重现"问题"在盲目地试验SetForegroundWindows等之前在我们的开发机器上。
答案 0 :(得分:1)
这是一个非常正常的事故。用于显示邮件项的窗口由另一个进程Outlook.exe拥有。一个进程是否可以将其自己的一个窗口推入前台是一个垃圾邮件,Windows窗口管理器使用的基本启发式方法在this MSDN Library article中有所描述。
在您自己的机器上获得一致的重复是很困难的。我在Windows的后续版本中观察到的一件事是,时间似乎也起了作用。应用程序创建窗口所需的时间越长,它无法工作的可能性就越大,最终落后于当前前景窗口。之前已经很常见,因为输入事件起了作用。与开发机器的典型挂起是他们有太多的马力:)
避免它的唯一一致方法是将您的应用程序编写为Outlook加载项,以便您的窗口由与Outlook窗口相同的进程和线程拥有。那艘船很可能很久以前就航行了。接下来最好的事情是最大化Outlook成功的几率,强制将前景窗口强制到Outlook窗口。很遗憾,请查看this post代码。使用Spy ++检查窗口类名称是否仍然准确。并最小化您自己的窗口,因此它完全不适合Outlook窗口,并且不可能获得任何输入事件。