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