我开发了使用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));
}
答案 0 :(得分:2)
问题发生的原因是当前机器上的Win8.1 DPI默认值为120(125%),而在所有其他机器上则为96(100%)