2013-05-11 104 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