如何在屏幕上显示所有窗口?

时间:2015-02-05 14:46:34

标签: c# interop pinvoke win32-process

上个月我问了一个类似的问题,但不幸的是我没有对这个问题做出回应。我再问一遍。
在我的一个项目中,我希望所有的窗口都显示在屏幕上。我试过这段代码

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,devenvplacement.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

0 个答案:

没有答案