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%)
我开发了使用 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%)