2015-05-10 5 views
-3

Я разработал приложение, использующее PostMessage для имитации щелчка мыши в другом приложении. У меня есть скриншоты второго приложения, у меня есть координаты для щелчка мыши, и я имитирую клик мыши для второго приложения. Все работает отлично на Windows 7, но когда я запускаю его на окнах 8, я настолько смущен: скриншоты второго приложения на win8 и win7 одинаковы, но когда я подражаю клику по PostMessage, нажмите в другой области. И у меня есть два вопроса: 1) Почему PostMessage работает на win8? 2) Как это можно исправить?Разница между PostMessage на окнах 7 и окнах 8

EDIT: Для PostMessage LPARAM = ((HIWORD < < 16) | (LOWORD & 0xffff)), где LOWORD находится слева и HIWORD является самым координаты

EDIT2: Подробнее Код

Step1

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

Step2

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

Имеет ли ваши обе машины одинаковое разрешение экрана? такие же настройки dpi и т. д.? –

+0

Нет. Но я тестировал его на машинах с win7 и другим разрешением экрана, и он отлично работает. – galakt

+2

Опубликуйте свой код, который, как вы утверждают, работает. Для другого разрешения экрана вы можете перевести его с помощью простой математики, как показано здесь [http://stackoverflow.com/a/23968643/2530848]. –

ответ

2

возникла проблема, потому что на текущей машине со значением по умолчанию Win8.1 DPI 120 (125%), в то время как на всех других машинах составляет 96 (100%)