/*********************************************************************  
  *  问题就在这里,如果窗口没有被隐藏,上面那句话会起作用;如果隐藏了,就不起  
  *  作用,虽然不会新起一个实例,但是已有的实例不会Show出来,真是烦人  
  ********************************************************************/  

解决方案 »

  1.   

    为什么需要去调用api?托盘也是有个主程序的,主程序里只要有你要打开隐藏的窗口的句柄,就可以show和hidden了啊,
      

  2.   

    就是让程序只有一个实例在运行吧,看看孟老大怎么解决的
    http://dotnet.aspx.cc/article/e2a17727-765f-4346-8446-5d130622cb54/read.aspx
      

  3.   

    TO:yistudio 
    你没看我贴子中的内容吗?就是执行下面代码:
     public  static  void  HandleRunningInstance(Process  instance)  
      {  
      //确保窗口没有被最小化或最大化  
      ShowWindowAsync  (instance.MainWindowHandle  ,  WS_SHOWNORMAL);  
      /*********************************************************************  
      *  问题就在这里,如果窗口没有被隐藏,上面那句话会起作用;如果隐藏了,就不起  
      *  作用,虽然不会新起一个实例,但是已有的实例不会Show出来,真是烦人  
      ********************************************************************/  
        
      //设置真实例程为foreground  window  
      SetForegroundWindow  (instance.MainWindowHandle);  
      }  最小化在托盘中的程序没有最大化或显示?
      

  4.   


    to:tmxk2002 
    1、我现在的问题是当程序最小化到托盘后,再点击程序时,不用运行新的程序,把最小化到托盘中的程序最大化就可以了,现在是最小化在托盘中的程序无法最大化!
    2、所以与你回答的是会事 
      

  5.   

    仅运行一个实例 
    void FirstInstance()
    {
    HWND pFirstWindow;
    if ( pFirstWindow = FindWindow( NULL, L"窗体的名称" ) )
    {
    if( IsIconic(pFirstWindow) ) 
    ShowWindowAsync(pFirstWindow, 9); //   9:SW_RESTORE标志,表示还原窗体 
    SetForegroundWindow(pFirstWindow);
    PostMessage( pFirstWindow, WM_SHOWWINDOW, true, 0 ); 
    exit(0);
    }
    else
    {
    //
    }
    }
      

  6.   

    我觉得不需要调用API函数吧,只要你各个页面做好处理用notifyIcon1控件就可搞定的,
    简单的给你写了一下 private void Form1_SizeChanged(object sender, System.EventArgs e)
    {//当窗体的大小改变时
    if(WindowState==FormWindowState.Minimized)
    {
         this.Visible=false;
         this.notifyIcon1.Visible=true;
                         this.Hide();
    }
    }
            private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
            {//使用托盘还原窗体
    this.Visible=true;
    this.WindowState=FormWindowState.Normal;
    this.notifyIcon1.Visible=false;
            }简单了写了一下,也不知道是否符合
      

  7.   

    你程序的问题在于,当窗口隐藏时,Process.MainWindowHandle返回的是0。
    你可以尝试着用FindWindow() API利用窗口标题来查找窗口句柄,或用命名事件来通知前一进程显示自己。
    [DllImport("User32.dll")]
    private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
      

  8.   

    我记得几年前开发过这个的,用的是notifyIcon,重新写窗口的Close事件,就是当别人点击关闭的时候,是隐藏自己而不是关闭。双击托盘或者选择托盘的菜单是就显示出来。不知道你是否是要实现这个功能。