Windows 10放大镜API鼠标点击损坏?

时间:2018-06-11 06:20:33

标签: c# windows api magnification

我使用windows放大镜api在autohotkey中创建了一个鼠标居中的放大镜。在Windows 7中完成,在新窗口8,8.1甚至10 LTSB上工作。但它似乎打破了Windows 10创建者更新,redstone 3更新,这进行到Windows 10 redstone 4,现在Windows 10 Redstone 5.当然,没有找到答案。

问题在于,在放大时,单击某个位置的screem会导致点击位置,就好像它不存在,在屏幕外,或者无处,使窗口散焦。

我使用https://code.msdn.microsoft.com/windowsdesktop/Magnification-API-Sample-14269fd2的放大镜api样本进行了测试 还使用下面的简单C#控制台应用程序进行了测试;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Runtime.InteropServices;

namespace Magnifier
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(MagInitialize());
            Console.WriteLine(MagSetFullscreenTransform(4.0f, 0, 0));
            Console.ReadLine();
            MagUninitialize();
        }

        [DllImport("Magnification.dll")]
        public static extern bool MagInitialize();

        [DllImport("Magnification.dll")]
        public static extern bool MagSetFullscreenTransform(float a, int b, int d);

        [DllImport("Magnification.dll")]
        public static extern bool MagUninitialize();

        [DllImport("Magnification.dll")]
        public static extern bool MagShowSystemCursor(bool a);
    }
}

我在安装了Windows 10 redstone 4的另一台计算机上进行了测试,仍然是相同的。

任何人都知道它是什么,它为什么会发生,以及如何解决它?

1 个答案:

答案 0 :(得分:0)

好的,很久以后我发现了这里的问题。

在Windows 10进行了一些主要的新更新之后,“ MagSetInputTransform”功能也开始以影响鼠标的方式影响鼠标。

需要UIA访问权限才能使此功能正常工作,这很麻烦,但是我在处理Autohotkey。

; offset_x and offset_y is the magnification origin (top-left)
; SM_CXVIRTUALSCREEN and SM_CYVIRTUALSCREEN is the maximum screen size
; If A_LastError returns 5, it means access denied and needs UIA permission (beyond administrator permission, so it won't work with just administrator privilege)

VarSetCapacity(rect_source, 16)
VarSetCapacity(rect_destination, 16)

NumPut(offset_x, rect_source, 0, "Int")
NumPut(offset_y, rect_source, 4, "Int")
NumPut(offset_x + SM_CXVIRTUALSCREEN / zoom_factor, rect_source, 8, "Int")
NumPut(offset_y + SM_CYVIRTUALSCREEN / this.zoom_factor, rect_source, 12, "Int")

NumPut(0, rect_destination, 0, "Int")
NumPut(0, rect_destination, 4, "Int")
NumPut(0 + SM_CXVIRTUALSCREEN, rect_destination, 8, "Int")
NumPut(0 + SM_CYVIRTUALSCREEN, rect_destination, 12, "Int")

If (!DllCall("Magnification.dll\MagSetInputTransform", "Int", 1, "Ptr", &rect_source, "Ptr", &rect_destination))
     Msgbox, % "Magnifier`nError " A_LastError)

有关其他信息,放大后我无法使用Wacom绘图板,因为它与此MagSetInputTransform一起出错。我还没有发现要解决此问题。

希望这些信息可以帮助遇到的任何人。