15

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

4

3 回答 3

19

IsWindowVisible 功能

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

来自pinvoke.net的 C# 签名:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);
于 2010-04-16T20:37:32.803 回答
1

现在遇到了同样的问题,这样解决了:

[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
于 2020-05-13T08:34:17.657 回答
0

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

也许这将适用。

于 2021-01-08T16:45:26.160 回答