有两个监视器,一个应用程序(例如IE)当前在第二个监视器中处于活动/显示状态。如何检测应用程序是在第一个还是第二个监视器中。 我需要知道这一点 - 在应用程序之上显示用户表单,而不管它是什么监视器。我知道WindowText(标题)是什么(如果有帮助)。
现在我只是在系统托盘附近显示我的表单,但希望在应用程序顶部显示。
// FORM POSITION
this.StartPosition = FormStartPosition.Manual;
Rectangle workArea = Screen.PrimaryScreen.WorkingArea;
int left = workArea.Width - this.Width;
int top = workArea.Height - this.Height;
this.Location = new Point(left, top);
答案 0 :(得分:0)
要获取另一个进程的窗口位置,您可以使用此处提到的库
How to get and set the window position of another application in C#
然后,您应该能够检查矩形位置
的屏幕private Screen IsVisibleOnScreen(Rectangle rect)
{
foreach (Screen screen in Screen.AllScreens)
{
if (screen.WorkingArea.IntersectsWith(rect))
{
return Screen;
}
}
return null;
}
答案 1 :(得分:0)
这是从VB转换而来的。但
Test()方法显示了如何使用它。
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);
public static RECT GetWindowLocationByName(string name)
{
IntPtr handle = FindWindow(default(string), name);
RECT result = default(RECT);
GetWindowRect(handle, ref result);
return result;
}
public static void Test()
{
dynamic location = GetWindowLocationByName("Untitled - Notepad");
Screen result = null;
foreach (Screen s in Screen.AllScreens) {
if (s.WorkingArea.IntersectsWith(new Rectangle(location.Left, location.Top, location.Right - location.Left, location.Bottom - location.Top))) {
result = s;
}
}
}
修改:更多信息
第1步:获取窗口句柄 第2步:获取窗口rect(位置/大小) 第3步:确定监视窗口所在的位置
如果你在另一个窗口上方看到过多的窗口,你实际上并不需要知道窗口相对于桌面的位置和大小。设置窗口位置时,在窗体和WPF中,X / Left是距离最左侧监视器左侧的距离(以像素为单位)。例如,如果你有两个montior 1024像素宽设置X / Left到2000将窗口86像素放入右手监视器。