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

时间:2015-05-10 14:54:07

标签: c# windows winapi user32

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

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

EDIT2: 更多代码

步骤1

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));
}

1 个答案:

答案 0 :(得分:2)

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