如题
        [DllImport("User32.dll ", EntryPoint = "FindWindow")]
         private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        [DllImport("User32.dll ", EntryPoint = "FindWindow")]
         private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);            Process p = new Process();
            p.StartInfo=new ProcessStartInfo("测试.exe");
            p.Start();            ShowWindow(f.MainWindowHandle, 1);
MainWindowHandle不为0,但窗体居然没显示出来?后来小的用IntPtr handle = FindWindow(null,"测试");
发现handle与MainWindowHandle的值不一样?不是同一个东西?请问大侠这是怎么回事,我该怎么利用进程,把这个进程里的窗体show同来咯?

解决方案 »

  1.   


    /// <summary>
            /// 
            /// </summary>
            /// <param name="lpClassName"></param>
            /// <param name="lpWindowName"></param>
            /// <returns></returns>
            [DllImport("user32.dll", EntryPoint = "FindWindow")]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
            /// <summary>
            /// 
            /// </summary>
            /// <param name="hwnd"></param>
            /// <returns></returns>
            [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
            public static extern IntPtr SetForegroundWindow(IntPtr hwnd);写:
     IntPtr Hander = FindWindow(null, "窗口标题");
                    if (Hander != IntPtr.Zero)
                    {
                        SetForegroundWindow(Hander);
                    }
      

  2.   

      /// <summary>
            /// 设置进程窗口置顶
            /// </summary>
            /// <param name="process"></param>
            public static void SetProcessTopMost(Process process)
            {
                try
                {
                    IntPtr handle = process.MainWindowHandle;
                    if (handle != null && handle != IntPtr.Zero)
                    {
                        IntPtr HWND_TOPMOST = new IntPtr(-1); //窗体置顶
                        IntPtr HWND_NOTOPMOST = new IntPtr(-2); //取消窗体置顶
                        uint SWP_NOMOVE = 0x0002; //不调整窗体位置
                        uint SWP_NOSIZE = 0x0001; //不调整窗体大小                    SetWindowPos(handle, HWND_TOPMOST, 1, 1, 1, 1, SWP_NOMOVE | SWP_NOSIZE);
                    }
                }
                catch (Exception ex)
                { }
            }
      

  3.   

    用API具体 自己查下吧2L和3L那个应该是对的吧
      

  4.   

    ShowWindow
    SetForegroundWindow
    一起使用
      

  5.   

    晕,我忽略了关健的地方没有告诉大家,软件的主窗体我设了一个下面的属性:
    主窗体的ShowInTaskBar = false
    所以我的问题应该是在这个ShowInTaskBar = false的情况下,如何show出已知进程的主窗口。
      

  6.   

    此问题自已已解决,从查询2.exe的load事件内把句柄传给打开这个进程的软件,谢谢各路大侠的回答,