对于winform程序,我做了一个系统托盘的应用,当点击关闭按钮时,exe程序显示在右下角的系统托盘中。而我从编译的bin目录中再次双击exe程序时,我希望右下角的图标应用程序能自动弹出到窗体最前端,并且在任务栏上显示(只需要实现这个效果的代码)。请问各位大侠该如何实现这个效果呢。请给出具体的代码示例。注意:应用程序显示在系统托盘的时候,任务栏上的图标消失。当双击系统托盘时,应用出现在窗体最前端,并且任务栏上显示图标(已实现)。类似如msn,qq啊等软件都是这种效果的。

解决方案 »

  1.   

    http://blog.bossma.cn/winform/winfrom_close_tip_for_close_or_min_solution/
    这里说的很详细
      

  2.   


    谢谢,我想解决的的问题是:再次双击exe程序时,右下角的图标应用程序能自动弹出到窗体最前端,并且在任务栏上显示?你给的链接并没有这个实现~~
      

  3.   

    还以为你说已实现把窗口ShowInTaskBar=false;
    拖一个NotifyIcon上去,设置一下图标和双击事件里写上this.WindowState = FormWindowState.Normal;        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
                this.WindowState = FormWindowState.Normal;
                this.ShowInTaskbar = true;
            }
      

  4.   

    Mutex实现单实例运行
    并双击时将windowsstate改成normal 即可
      

  5.   


    非常谢谢~请注意我的问题是:再次双击exe程序时,右下角的图标应用程序能自动弹出到窗体最前端,并且在任务栏上显示?(关闭应用程序时状态栏不显示,只显示右下角的系统托盘)顺便说一下:当应用程序显示在状态栏上时,我再次双击exe,应用可以显示到前端,这个我已实现了。请针对我的问题给出具体的代码,多谢各位了~~~~~~
      

  6.   

    人家说了啊
    自动弹出就是window.show()
    显示在任务栏就是window.showInTaskbar = true
      

  7.   


    你好,可能是我说的不清楚,你没有明白我的意思,步骤如下。1. 从bin目录下双击exe程序显示在前端。
    2. 单击右上角的关闭按钮。注意:此时exe显示在右下角的系统托盘,并且任务栏上没有此应用的图标。
    3. 第二次双击bin目录下的exe程序。
    4. 我的问题:此时如何将exe显示到桌面前端,并且在任务栏上显示图标???而不是去双击那个notifyIcon1,双击的是bin下编译好的exe应用。
      

  8.   

    追加一句:第二次双击exe的时候,打开的是右下角已经running的应用,而不是重新去run一个exe。也就是说,你的任务管理器中只有一个exe应用的进程。
      

  9.   

    我希望是同一个进程,你用的msn,qq,不都是这种效果吗~~
      

  10.   

    限制单进程么
    http://www.cnblogs.com/Sangplus/archive/2011/04/22/2024994.html
    http://www.cnblogs.com/aaaSoft/archive/2009/07/28/1533301.html
      

  11.   

    你问的是这个啊。
    也很简单,在程序一开始判断是否之前有实例运行。
    如果有,用findwindow找到这个窗口的句柄,发送一个消息给他,然后自己this.close()
    然后如果收到这个特定消息,自己show出来即可
      

  12.   

    你问的是这个啊。
    也很简单,在程序一开始判断是否之前有实例运行。
    如果有,用findwindow找到这个窗口的句柄,发送一个消息给他,然后自己this.close()
    然后如果收到这个特定消息,自己show出来即可
      

  13.   

    看看api,使用API实现。
    /// <summary>
        /// 查找窗口句柄
        /// </summary>
        /// <param name="lpClassName">窗口类名,下载SpyLite24.exe可以获取</param>
        /// <param name="lpWindowName">窗口标题</param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);[DllImport("user32.dll")]
            private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);//可将最小化窗口还原
            private const int SW_RESTORE = 9;
    IntPtr findPtr = FindWindow(null, "QQ游戏");
                    ShowWindow(findPtr, SW_RESTORE); //将窗口还原看看这个http://www.cnblogs.com/slyzly/articles/2331487.html
      

  14.   

    非常感谢大家的答复,大家所说的方案我已经实现了。请仔细看下我在9楼和10楼中对问题的详细描述。我的问题是:......,当第二次双击exe时,如何将应用显示到桌面前端,并且在任务栏上显示图标???大家给出的答案只是解决了部分情况,而我说的这种情况却没有解决,各位做一个demo就知道上面的方案是解决不了我所描述的问题。希望达人能给出具体的code实现~~