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

C# 使用C确定窗口是否可见#,c#,user32,C#,User32,我在C#中有一个控制台/表单混合应用程序,目前,我必须依靠user32.dll来显示/隐藏控制台窗口。但是我似乎找不到一种方法来确定控制台窗口是隐藏的还是可见的(不存储自己的值): IsWindowVisible函数检索指定窗口的可见性状态 C#签名人: 现在有同样的问题,通过以下方式解决: [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern IntPtr WindowFromPoint(Po

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

:

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

C#签名人:


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

[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
我在C#console应用程序中使用此函数来确定启动程序时是否有可见的控制台窗口(例如,通过
System.Diagnostics.Process.Start()
with
CreateNoWindow=true


也许这会适用。

当窗口实际可见时,将不会检查。阅读msdn文章。我认为您需要[DllImport(USER32)]公共静态外部bool-IsIconic(IntPtr-hWnd);“如果窗口被其他窗口遮挡或被其父窗口剪裁,则具有WS_VISIBLE样式的窗口的任何图形都不会显示。”-这意味着无论是否可以看到,这都将返回true。仅供参考(获取窗口句柄):
var source=new WindowInteropHelper(myWindow)。句柄如何将winForm Visible设置为true?在Program.cs,我尝试ShowWindow失败
[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
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;
        }
    }
}