2009-03-07 21 views
2

在一個DDE事件中,我的程序加載一個文件並且應該彈出到前臺。 我用 在DDE事件發生後,我如何將窗戶拉到前面?

                  
                    show; 

                  
                

它只是似乎是工作像然後當我有隱藏的窗口。

,所以我說

                  
                    bringtofront; 

                  
                

這同樣的工作,如果它是隱藏的,封閉的,最小化或托盤圖標但如果只是以另一個窗戶是開着的。

我甚至嘗試了一些哈克這樣的東西

                  
                    windowstate:=wsminimized; 
windowstate:=wsnormal; 

                  
                

,試圖迫使它來展示,但無濟於事。我知道代碼正在運行,因爲我在此區域的任一側都有打印輸出,並且沒有可能卡住的條件語句。

回答

1

SetForegroundWindow不會總是工作。事實上,現在它不太可能工作,因爲應用程序不應該抓住焦點,他們只能放棄它。 MS一直在嘗試 以防止應用程序竊取輸入焦點。閱讀Raymond Chen對 blog entry 的評論以獲得一些歷史記錄。所以,如果你自己是前臺應用程序,你可以SetForegroundWindow到另一個應用程序,一切都會很好。如果您不是前臺應用程序,則可能發生的唯一情況是任務欄按鈕將開始閃爍。

只是爲了增加一些混淆,確切的行爲是依賴於Windows版本,所以發生什麼取決於您正在運行的Windows的品種 - 他們已經在這個很長時間搞亂了:-)。

+0

發送DDE事件的程序需要通過調用AllowSetForegroundWindow進行協作。我預計Explorer會這樣做,但其他程序可能忽略了這些細節。 – 2009-03-07 17:44:12