【发布时间】:2011-02-09 00:02:02
【问题描述】:
我有一个 C# 中的控制台/表单混合应用程序,目前,我必须依靠 user32.dll 来显示/隐藏控制台窗口。但我似乎无法找到一种方法来确定控制台窗口是隐藏还是可见(不自己存储值)
【问题讨论】:
我有一个 C# 中的控制台/表单混合应用程序,目前,我必须依靠 user32.dll 来显示/隐藏控制台窗口。但我似乎无法找到一种方法来确定控制台窗口是隐藏还是可见(不自己存储值)
【问题讨论】:
IsWindowVisible 函数检索指定窗口的可见性状态。
来自pinvoke.net的C#签名:
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool IsWindowVisible(IntPtr hWnd);
【讨论】:
var source = new WindowInteropHelper(myWindow).Handle;
现在遇到了同样的问题,这样解决了:
[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# 控制台应用程序中使用此函数来确定程序是否在控制台窗口可见的情况下启动(例如,通过 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;
}
}
}
也许这将适用。
【讨论】: