2014-01-10 23 views
1

我們發現,調用MailItem.Display方法的z順序行爲在不同計算機之間有所不同嗎?

myMailItem.Display(false) 

方法適用我們的開發機器上很好,因爲它打開用戶的前景的消息窗口。無論我們是在VS /附帶調試器還是僅作爲已安裝的應用程序運行。

但是在某些客戶的機器上,我們的Winforms應用程序會在後面打開

Windows的版本似乎沒有任何區別。

這是可以解釋和預測的東西嗎?

我們當然可以玩的設置SetForegroundWindow,但我寧願能夠理解爲什麼有SetForegroundWindows等

回答

1

盲目嘗試這是之前的差異,重現我們的開發機器上的「問題」非常正常的事故。用於顯示郵件項目的窗口屬於不同的進程Outlook.exe。無論某個進程是否可以將其自己的某個窗口推入前臺是一種垃圾拍攝,Windows窗口管理器使用的基本啓發式方法在this MSDN Library article中進行了描述。

在您自己的機器上獲得一致的repro會很困難。我在Windows的後續版本中觀察到的一件事是,時機似乎也扮演着一個角色。應用程序創建窗口所用的時間越長,它將不起作用的可能性越大,並以當前前景窗口結束。之前已經很普遍,因爲輸入事件起作用。與開發機器典型的掛機是,他們有太多的馬力:)

避免它的唯一一致的方法是編寫您的應用程序作爲一個Outlook加載項,以便您的窗口擁有相同進程和線程作爲Outlook窗口。那艘船可能航行很久以前。接下來最好的辦法是最大限度地提高Outlook成功的可能性,並強制前景窗口進入Outlook窗口。不幸的是,難以檢查this post的代碼。使用Spy ++來檢查窗口類名是否仍然準確。並儘量減少自己的窗口,這樣Outlook窗口就完全沒有了,並且不可能得到任何輸入事件。

相關問題