2013-05-11 100 views
1

我有一個Windows窗體應用程序,它將在系統托盤最小化時進入系統托盤。當我收到消息彈出我的應用程序時,它會調用ShowWindowFromTray()函數。我不想專注於有重點的應用程序,因爲它可能會中斷用戶的操作。C#FormWindowState.Normal不竊取焦點

private void ShowWindowFromTray() 
{ 
    this.Show(); 
    this.WindowState = FormWindowState.Normal; 
} 

BTW這個應用程序選項,用戶可以檢查應用程序將始終在所有其他窗口的頂部或最頂層。

+0

豈不是更好地顯示[氣球提示](http://msdn.microsoft.com/en -us/library/windows/desktop/aa511497.aspx)從通知區域中的應用圖標中刪除?這是顯示非強制性警報/消息的標準方式。 (順便說一下,它被稱爲「通知區域」,而不是「系統托盤」。沒有「系統托盤」這樣的東西)。 – 2013-05-11 08:20:19

+0

我們在通知區域也有一個氣球提示。這是用戶的偏好,並根據用戶選擇的偏好來決定用戶的選擇。 – 2013-05-14 01:04:25

回答

3

相反放映()的,使用的ShowWindow()API使用SW_SHOWNA

private const int SW_SHOWNA = 4; 

    [System.Runtime.InteropServices.DllImport("user32.dll")] 
    private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

    private void ShowWindowFromTray() 
    { 
     ShowWindow(this.Handle, SW_SHOWNA); 
    } 
+0

太棒了。非常非常小的挑剔:根據你連接的MSDN 4是SW_SHOWNOACTIVATE,而8是SW_SHOWNA。我確實知道他們非常相似,都會爲傑夫的目的而工作。 – 2013-05-11 04:01:21

+0

好點...複製和粘貼速度太快。 = O – 2013-05-11 05:07:16