gpt4 book ai didi

c# - Windows 10 放大镜 API 鼠标点击坏了?

转载 作者:行者123 更新时间:2023-11-30 18:14:12 37 4
gpt4 key购买 nike

我使用 windows 放大镜 api 在 autohotkey 中创建了一个以鼠标为中心的放大镜。在 Windows 7 中完成,在新的 Windows 8、8.1 甚至 10 LTSB 上工作。但它似乎在 windows 10 creators update、redstone 3 update 中中断,这继续到 windows 10 redstone 4,现在是 Windows 10 Redstone 5。当然,没有找到答案。

问题是在放大的情况下,点击屏幕的某个位置会导致点击位置好像不存在,在屏幕之外,或者无处可去,使窗口散焦。

我使用来自 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的电脑上测试过,还是一样。

有人知道它是怎么回事、为什么会发生以及如何解决它吗?

最佳答案

好吧,隔了这么久才发现这里的问题是什么。

在一些新的主要 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 有错误。我还没有找到解决这个问题的方法。

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

关于c# - Windows 10 放大镜 API 鼠标点击坏了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50791473/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com