Screen.PrimaryScreen.WorkingArea并不总是返回正确的值

时间:2014-01-20 16:23:05

标签: c# winforms screen resolution

我正在使用Screen.PrimaryScreen.WorkingArea在主屏幕的右下角放置一个弹出窗口。通常情况下,这可以按照预期的方式运行,但在运行应用程序时会出现一些问题

  • 连接到具有不同分辨率的不同屏幕的计算机(如在办公室之间移动的笔记本电脑)。
  • 作为RDP服务器的计算机,它连接到具有不同分辨率的客户端(例如连接到不同办公室的家用计算机)。

在上述某个场景中更改了分辨率多次(?)次后,WorkingArea的值似乎并不总是最新的,这使得很难正确定位弹出窗口

是否有办法强制Screen.PrimaryScreen.WorkingArea刷新,或者是否有其他方法可以在Windows窗体应用程序中获取可以替代使用的屏幕解析?

1 个答案:

答案 0 :(得分:0)

您可以尝试Pinvoke

[DllImport("user32.dll", SetLastError = false)]
static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);

RECT scBounds = new RECT();
GetWindowRect(GetDesktopWindow(), ref scBounds);