Почему сообщение, отправленное из приложения, которое «автоматически масштабирует Windows при более высоком DPI», изменяется при получении? - PullRequest
0 голосов
/ 03 февраля 2019

Я запускаю это в окне 10 с разрешением 1920x1080, а для Scale and Layout установлено значение 125%.

Чтобы увидеть проблему, я написал несколько строк кода, которые установят курсор на (x =100, y = 100) Paint.exe, затем щелкните левой кнопкой мыши.Я запускаю один и тот же код с поддержкой DPI (без масштабирования) и без DPI (с автоматическим масштабированием в Windows), но результаты не совпадают.

  1. Запустите Ms Paint, выберите кисть и цвет
  2. Кнопка запуска кода запуска
  3. Повтор в другом режиме

Вот результаты:

enter image description here

[DllImport("user32")] static extern IntPtr FindWindowA(string lpClassName, string lpWindowName);
[DllImport("user32")] static extern IntPtr FindWindowExA(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);


private void button1_Click(object sender, EventArgs e) {
        //MSPaintApp
        //MSPaintView
        //Afx:00007FF701360000:8

        var handle = FindWindowA("MSPaintApp", null);
        handle = FindWindowExA(handle, IntPtr.Zero, "MSPaintView", null);
        handle = FindWindowExA(handle, IntPtr.Zero, "Afx:00007FF701360000:8", null); // paper

        System.Threading.Thread.Sleep(500);

        Point point = new Point(100, 100);
        User32.ClientToScreen(handle, ref point);

        User32.SetCursorPos(point.X, point.Y); //Move cursor to (100; 100) of paper
        User32.PostMessageW(handle, 513, 0, 100 + 100 * 65536); //WM_LBUTTONDOWN 
        User32.PostMessageW(handle, 514, 0, 100 + 100 * 65536); //WM_LBUTTONUP 
    }

Почему они это делают?и сколько типов сообщений они изменят?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...