使用 
Process p = Process.Start(start.exe);
IntPtr h = p.MainWindowHandle;Process p2 = Process.Start(start.exe);
IntPtr h2 = p2.MainWindowHandle;变量h可以获得这个start.exe的句柄 
但是 再打开一个start.exe 变量h2 就获得不了这个句柄了,必须关闭前一个程序才可以,有没有方法 解决?

解决方案 »

  1.   

    应该是start.exe的问题吧,我试验了下,打开cmd.exe的话两次都可以获得句柄,而且不同
    Process p2 = Process.Start(start.exe); 这句有没有真正打开start.exe?如果打开了应该可以获取的到的
      

  2.   

    难道是程序本身的问题,我的代码是这样写的
     private void StartInfo()
            {
                ProcessStartInfo start = new ProcessStartInfo();
                start.FileName = "C:\\start.exe";
                try
                {
                    Process p = Process.Start(start);
                    while(!p.WaitForInputIdle())  {}
                    IntPtr h = p.MainWindowHandle;
                }
                catch ()
                {
                    return;
                }        }//两个按钮 分别启动两次,第一次可以,h的值不为o,第二次h就为o了
            private void button1_Click(object sender, EventArgs e)
            {
                StartInfo();
            }
            private void button2_Click(object sender, EventArgs e)
            {
                StartInfo();
            }
      

  3.   

    你的 start.exe 可能在检验到程序已启动然后关闭自己... 当然你获取不到窗体句柄了
      

  4.   

    有可能是程序还没有生成窗口就已经在调用IntPtr h = p.MainWindowHandle了,你试下延迟处理
      

  5.   


    我加上了  while (!p2.WaitForInputIdle()) { } 
    还是不行有没有别的方法 打开多个程序获得句柄?
      

  6.   

    试试重新赋值或者换个程序试试
    Process p = Process.Start(start);
    while(!p.WaitForInputIdle())  {}
    Process l = Process.GetProcessById(p.Id);
    Thread.Sleep(1000);
    IntPtr h = l.MainWindowHandle;如果不行可能只能用FindWindow了