windows 7 和 windows 8 上的 PostMessage 之间的区别

Difference between PostMessage on windows 7 and windows 8

我开发了使用 PostMessage 模拟鼠标在另一个应用程序中单击的应用程序。 我有第二个应用程序的屏幕截图,我有鼠标点击的坐标,我正在模拟第二个应用程序的鼠标点击。在 windows 7 上一切正常,但是当我在 运行 上 windows 8 时,我很困惑: 第二个app在win8和win7上的截图是一样的,但是当我用PostMessage模拟点击时,点击发生在不同的区域。 我有两个问题: 1) 为什么 PostMessage 在 win8 上工作不同? 2) 如何解决?

编辑: For PostMessage lParam = ((HiWord << 16) | (LoWord & 0xffff)), 其中LoWord为Left,HiWord为Top坐标

编辑2: 更多代码

第一步

var hW = Win32.User32.FindWindow(null, "AppName");

第二步

MouseEngine.Click(hW, 100, 100);

其中

public void Click(IntPtr hWnd, int left, int top)
    {
        // send mouse down
        User32.PostMessage(
            hWnd,
            User32.Message.WM_LBUTTONDOWN,
            0,
            User32.MakeLParam(left, top));
        // send mouse up
        User32.PostMessage(
            hWnd,
            User32.Message.WM_LBUTTONUP,
            0,
            User32.MakeLParam(left, top));
    }

哪里

public static int MakeLParam(int LoWord, int HiWord)
{
    return ((HiWord << 16) | (LoWord & 0xffff));
}

出现问题是因为当前机器上的 Win8.1 DPI 默认值是 120(125%),而在所有其他机器上是 96(100%)