为什么 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;
}
}
答案 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
,我不得不艰难地学习。