2012-02-27 94 views
0

我想通過點擊應用程序上的按鈕打開幾個窗口(IE窗口,Outlook郵件窗口,記事本窗口)。在另一個應用程序後面打開窗口

問題:當我點擊按鈕並且所有這些應用程序一個接一個打開時。我自己的應用程序(用戶點擊的應用程序)在窗口混亂中丟失。

我想在我的應用程序後面打開所有這些窗口。有什麼建議麼 ?我可以用來實現這種行爲的任何標準API?

邏輯:我想按窗口Z順序做一些類似窗口位置= 2的打開窗口。這樣,當其他窗口打開時,處於活動狀態的窗口始終位於頂部(z順序= 1)。

任何指針都會有幫助。

感謝

Karephul

UPDATE: http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx 我用這個PInvoke的設置我的應用程序窗口的最頂層。那麼所有其他窗口將自動打開。完成後,我使用相同的PInvoke取消設置最上面的窗口標誌。更多細節在我發佈的鏈接中。

回答

1

您可以將窗體的TopMost屬性設置爲True。

請確保您允許用戶更改或僅在短時間內完成該操作,因爲它確實會讓用戶惱火。

0

可能更侵入比你喜歡,但我偶然發現,同時做一些辦公室互操作是打開Office應用程序和文件後,你可以發出

MessageBox.Show("All files have been opened.") 

這應該讓你的應用程序(和消息框)最前面。

+0

代碼此將閃爍在桌面上的所有窗口。這是一種煩人的。 – karephul 2012-02-27 21:12:44

1

你有兩種方式,調用win32命令SetForgroundWindow或切換到最上面。


要切換到最上面,請執行以下操作。這將把窗口放在前面,但不會將它放在最頂層,這非常煩人。

// Launch applications (Process.Start(...)) 
TopMost = true; 
TopMost = false; 

要調用Win32命令

函數[DllImport( 「user32.dll中」) [返回:的MarshalAs(UnmanagedType.Bool) 靜態的extern BOOL SetForegroundWindow(IntPtr的的HWND );

... 

// Launch applications (Process.Start(...)) 
SetForegroundWindow(this.Handle); 

... 
+0

我最終使用「SetWindowPos」P/Invoke調用。 SetForeGroundWindow就是我正在使用的,但它具有華麗的效果。新窗口將開始..它會在前面,然後我們SetForeGround到您的應用程序,然後將在頂部..如果它發生在10寡婦..想象混亂。 – karephul 2012-02-27 21:16:21

0

如果您正在使用System.Diagnostics.ProcessStart方法可以使用ProcessStartInfo類,並將其傳遞到作爲參數的重載方法Start(ProcessStartInfo startInfo)啓動時的處理狀態設置應用程序變量。有一個屬性ProcessStartInfo。WindowStyle類型爲ProcessWindowStyle,它具有4個值Normal,Hidden,Minimized和Maximized,通過將該值設置爲Minimized,您可以重新獲得焦點並輕鬆置於前端。從MSDN

// Uses the ProcessStartInfo class to start new processes, 
    // both in a minimized mode. 
    void OpenWithStartInfo() 
    { 
     ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe"); 
     startInfo.WindowStyle = ProcessWindowStyle.Minimized; 

     Process.Start(startInfo); 

     startInfo.Arguments = "www.northwindtraders.com"; 

     Process.Start(startInfo); 
    } 
+0

我們已經研究過這個選項,但這意味着用戶必須恢復所有的窗口才能看到裏面有什麼。所以,我們決定反對它。 – karephul 2012-02-27 21:13:56

相關問題