GetWindowRect 的偏移量为 Windows 10

GetWindowRect has offset in Windows 10

我在我的程序中使用 GetWindowRect 来获取桌面上 window 的坐标。这在我这里用于测试的十几台 PC (XP-W8.1) 上运行良好,但在我的一台带触摸屏的 W10 PC 上却不行:坐标在左上角有一个偏移量。我用谷歌搜索了 Windows 10 中的错误和与监视器相关的东西,但找不到任何东西,但这似乎是一个常用的功能,而且问题很容易重现。

有人有线索吗?

代码,简化:

hwnd = FindWindow(NULL, windowname);
if (hwnd) {
  TRect r;
  GetWindowRect(hwnd, &r);
}
HWND hdt = GetDesktopWindow();
HDC dcdt = GetWindowDC(hdt);
// bitblt canvas to get window (won't work for high DPI setting)

您的程序不支持 DPI,因此受制于 DPI 虚拟化。这意味着像 GetWindowRect 这样的函数返回的坐标将是虚拟坐标,因此不会匹配真实的屏幕坐标。