使用C#确定窗口是否可见

时间:2010-04-16 20:34:44

标签: c# user32

我在C#中有一个Console / Form混合应用程序,目前,我必须依赖user32.dll来显示/隐藏控制台窗口。但我似乎无法找到一种方法,我可以确定控制台窗口是隐藏还是可见(不自行存储值)

3 个答案:

答案 0 :(得分:8)

IsWindowVisible Function

  

IsWindowVisible函数检索指定窗口的可见性状态。

来自pinvoke.net的C#签名:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);

答案 1 :(得分:0)

现在有相同的问题,可以通过以下方式解决:

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr WindowFromPoint(Point lpPoint);

var mainForm = this; // or any other form you like to check
bool windowIsInvisible =  
    WindowFromPoint(new Point(mainForm.Left, mainForm.Top)) != mainForm.Handle || // topleft invisible
    WindowFromPoint(new Point(mainForm.Left + mainForm.Width - 1, mainForm.Top)) != mainForm.Handle || // topright invisible
    WindowFromPoint(new Point(mainForm.Left, mainForm.Top + mainForm.Height - 1)) != mainForm.Handle || // downleft invisible
    WindowFromPoint(new Point(mainForm.Left + mainForm.Width -1, mainForm.Top + mainForm.Height -1)) != mainForm.Handle; // downright invisible

答案 2 :(得分:0)

我在 C# 控制台应用程序中使用此函数来确定程序是否在控制台窗口可见或不可见的情况下启动(例如通过 System.Diagnostics.Process.Start()CreateNoWindow = true)。

public static bool IsConsoleVisible()
{
    try
    {
        return Console.WindowHeight > 0;
    }
    catch (System.IO.IOException ex)
    {
        if (ex.Message.Contains("The handle is invalid."))
        {
            return false;
        }
        else
        {
            throw ex;
        }
    }
}

也许这会适用。