process.MainWindowHandle为零?

时间:2014-03-13 08:33:05

标签: c# .net wpf

为什么 process.MainWindowHandle 在下面的代码中为零?

Process me = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName(me.ProcessName))
                    {
                        if (process.Id != me.Id)
                        {
                            MessageBox.Show(string.Format("{0}", process.MainWindowHandle));
                            ShowWindow(process.MainWindowHandle, 5);
                            ShowWindow(process.MainWindowHandle,3);
                            SetForegroundWindow(process.MainWindowHandle);
                            break;
                        }
                    }

3 个答案:

答案 0 :(得分:3)

隐藏窗口是非常重要的细节。

来自MSDN article on the Process.MainWindowHandle Property

  

只有进程具有与之关联的主窗口   图形界面。如果关联的进程没有main   窗口,MainWindowHandle值为零。 该值也为零   已隐藏的进程,即不是的进程   在任务栏中可见。

答案 1 :(得分:2)

Process.MainWindowHandle属性使用启发式方法来确定主窗口是什么,但这并不总是有效。 尝试使用EnumWindows。 我写了一篇关于如何使用它的tutorial

答案 2 :(得分:0)

在这里要为已经很好的答案添加一件事:

如果您打开的应用具有 GUI 但仍未显示在任务栏中,则说明 MainWindowHandle 无法找到。

例如:如果您有权访问 Winform 应用程序的代码,请转到表单的 properties 并确保它是 True 部分中的 Icon

我的设置为 False,我不得不艰难地学习。