上个月我问了一个类似的问题,但不幸的是我没有对这个问题做出回应。我再问一遍。
在我的一个项目中,我希望所有的窗口都显示在屏幕上。我试过这段代码
Process[] procs = Process.GetProcesses();
if (proc.MainWindowHandle!=IntPtr.Zero)
{
GetWindowPlacement(proc.MainWindowHandle, ref placement);
if (proc.ProcessName!="McUICnt" && proc.ProcessName!="devenv" && proc.ProcessName!="DCSHelper" && proc.ProcessName!="explorer")
{
if (placement.showCmd == 1)
{
handles[temp] = proc.MainWindowHandle;
GetWindowRect(proc.MainWindowHandle, ref rct);
rect[temp] = rct;
temp++;
MessageBox.Show(proc.ProcessName.ToString());
}
}
}
如你所见,我已经检查了McUICnt,devenv
。 placement.cmd==1
检查具有正常状态的窗口。但McUICnt和devenv也正在通过这个条件,但没有在屏幕上显示。当我再次运行程序然后我得到如上所述的新过程。
如何立即在屏幕上显示所有窗口?
的更新:
当我使用EnumWindows时,我使用此代码
EnumWindows(new EnumWindowsProc(EnumTheWindows), IntPtr.Zero);
和
protected static bool EnumTheWindows(IntPtr hWnd, IntPtr lParam)
{
int size = GetWindowTextLength(hWnd);
RECT rct = new RECT();
if (size++ > 0 && IsWindowVisible(hWnd))
{
StringBuilder sb = new StringBuilder(size);
GetWindowText(hWnd, sb, size);
MessageBox.Show(sb.ToString());
handles[tempHandle] = hWnd;
GetWindowRect(hWnd, ref rct);
rect[tempHandle] = rct;
tempHandle++;
}
return true;
}
但它也显示了最小化的窗口。即使我已经支票IsWindowVisible