问题标签 [magnification-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
506 浏览

winapi - 为什么我的捕获窗口代码不起作用?

我是winapi的新手。我在codeproject看到了一个捕获桌面的例子,不包括一些窗口

有一个子窗口被创建并被捕获。

我想创建一个父窗口,而不是创建一个子窗口。

我已经尝试过使用此代码。

一个带有黑屏的新窗口可见。即使我单击捕获按钮,窗口也会卡住。

为什么会发生这种情况以及如何使用新的父窗口使其工作?

谢谢

0 投票
1 回答
1443 浏览

java - 32 位 JRE 中的 jna 指针

我正在使用 jna 在 Java 中调用放大 api 函数。

MagImageScalingCallback.java

MAGIMAGEHEADER.java

放大.java

WinGDIExtra.java

我的代码

如果调用该函数,MagSetWindowSource则调用该MagImageScalingCallback函数。

问题是如果我使用 jre7(64 位)运行此代码,一切正常。但是如果我在 jre7(32 位)中运行相同的代码,我会收到以下错误。

如何解决这个问题?如何在 32 位 JRE 上完成这项工作?谢谢!

0 投票
1 回答
760 浏览

javascript - Magnific PopUp 不适用于动态添加的元素

我们正在使用 Magnific 库在我们的站点中显示弹出窗口。除了一件事,一切都进展顺利。

当我们动态添加元素时,弹出窗口不适用于动态添加的元素。你能帮我如何绑定动态添加元素的点击事件以显示弹出窗口吗?这是我的代码如下:

}

该类负责显示弹出窗口,但它不适用于动态添加的元素。

换句话说,click 事件没有在 DOM 中注册新添加的元素。

0 投票
2 回答
158 浏览

c++ - 放大率低于 125% 默认 Win API(101 - 124% 之间)

我正在研究 Windows 放大 api,我一直在使用它,但我对放大默认值有疑问,Windows 只允许您在最低时增加 25%。我有可能一次增加 1-5% 吗?鼠标滚动进出可能会增加百分之一?

Windows 最低 25% 默认][1]

提前感谢你的帮助。

成功集 == 假;当它不是 1.1 时,任何更低的东西都会失败,我意识到 1.1 = 125% 缩放。

0 投票
1 回答
514 浏览

delphi - 放大 api:与实际尺寸不成比例的屏幕截图

我有以下代码,在没有基于示例的主窗体的情况下,它可以很好地进行屏幕捕获。

我的问题是结果屏幕截图在右侧被剪切并在左侧扩展,例如测试此代码以在打开 SO 网站的情况下捕获整个桌面:

在此处输入图像描述

如您所见,垂直滚动条可以在两侧(左侧和右侧)看到。

我怎样才能解决这个问题?

这是完整的示例:

放大倍率

0 投票
1 回答
711 浏览

delphi - 为什么 MagSetImageScalingCallback 函数在新桌面执行时会失败?

我正在尝试使用Magnification api创建一个新桌面的屏幕截图( CreateDesktopapi + 执行explorer.exe到新桌面),如教程中所示。我成功地将教程中的 C++ 代码移植到 Delphi 中,当从Win Vista ~ Win 10执行并启用Aero 主题时,这两个示例(C++ 和 Delphi)都可以正常工作。

这个问题的麻烦是因为如果我创建一个新桌面(克隆原始桌面)并执行这个屏幕截图示例,则会MagSetImageScalingCallback失败。

有人知道MagSetImageScalingCallback的可能解决方案也适用于创建的新桌面吗?

提前感谢任何帮助。

放大倍率


版:

GetLastError()返回50 - ERROR_NOT_SUPPORTED -不支持请求。

但这适用于原始桌面,我不明白。

0 投票
0 回答
805 浏览

visual-c++ - 基于 Windows 放大 API 的屏幕捕获在 Windows 7 64 位禁用 Aero 主题时失败

我正在尝试使用基于https://www.codeproject.com/Articles/607288/Screenshot-using-the-Magnification-library?msg=5570528#xx5570528xx中给出的代码示例的 Windows 放大 API 捕获桌面屏幕。

该程序(32 位可执行文件)在 Windows8 和 Windows10 上运行良好,但在 Windows7 操作系统上失败。我将程序编译为 64 位,即使对于上述代码项目线程中提到的示例程序,其行为也是相同的。

调试后,我发现MagImageScalingCallback函数将图像宽度和高度返回为 4*4 而不是显示器的大小,这会导致程序在 Windows7 机器上崩溃或捕获空白屏幕(参考:https ://docs.microsoft.com /en-us/windows/desktop/api/magnification/ns-magnification-tagmagimageheader)。

所有 API 调用(MagInitialize、CreateWindow、MagSetWindowFilterListMagSetWindowSource)均成功。在初始化创建、设置桌面区域和分配过滤器列表方面,代码流中没有 API 调用失败或错误。

DWM(航空主题)已关闭(根据参考:https ://docs.microsoft.com/en-us/windows/desktop/api/magnification/nf-magnification-magsetimagescalingcallback )

即使在研究了大约 3 天后,我也找不到与该主题相关的任何资源。我必须使用放大 API,因为我需要捕获留在桌面上其他窗口之后的窗口。

任何帮助,将不胜感激。

更新1:

我发现应用程序只有在启用 Aero 主题时才能捕获屏幕,这与https://docs.microsoft.com/en-us/windows/desktop/api/magnification/nf-magnification中的声明相矛盾-magsetimagescalingcallback

我不确定如何使其在默认禁用 Aero 主题或不可用的操作系统上运行。

0 投票
0 回答
602 浏览

c - 放大 API:重绘期间闪烁

我通过稍微修改 Microsoft 提供的Magnification API 示例创建了一个应用程序,以实现对在放大镜窗口中捕获和显示的每个帧的自定义转换。

我用 将MagSetImageScalingCallbackmy 函数设置为回调。调用回调没有问题,并且可以轻松地操作源图像和目标图像,因为原始位作为指针(srcdata 和 destdata)传递给回调。

使用设置为 16 ms (~60Hz) 的计时器刷新窗口。使用InvalidateRectAPI 调用刷新。问题是当放大镜窗口出现闪烁时。这种情况尤其发生在开始菜单出现时,如果启用“Peek”或每次在前台有一个具有动态内容的窗口时。

我试图拦截WM_ERASEBKGNDInvalidateRect使用 FALSE 作为第三个参数调用,但这没有帮助。我试图UpdateWindow在无效之前添加一个调用,但没有任何改变。

Windows 10 附带的放大镜应用程序没有同样的问题。我想知道为什么会发生这种情况以及如何摆脱闪烁。

为了重现问题,请从上面的链接下载 Magnification API 示例,然后将文件MagnifierSample.cpp中的内容替换为以下源代码:

请注意,我添加了设置回调的代码

然后我创建了这个回调:

Sleep语句“模拟”了我的自定义转换所花费的时间。

如果您使用 Edge 打开 youtube 视频,然后运行​​MagnifierSample.exe可执行文件,您应该会看到一个黑屏闪烁,当屏幕闪烁时,您应该看到放大镜窗口后面的内容(黑屏)。这正是我的应用程序中正在发生的事情。睡眠值设置为 20,但我不知道回调实际需要多长时间。我只是猜测它可能需要超过 16 毫秒。

要重现该问题,请执行以下步骤:

  1. 手动运行 MagnifierSample.exe(不要使用调试器运行它)
  2. 您应该会看到黑屏
  3. 按窗口键
  4. 在前台设置一个带有视频或动态内容的窗口
  5. 点击黑色窗口让任务栏消失
  6. 您应该看到屏幕有时会闪烁

是否可以设置类似于MagSetImageScalingCallback普通窗口句柄的回调?我知道我可以使用 WindowProc 回调来拦截发送到窗口的消息但是我无权访问 rawbits,除非我使用CreateDIBSectionSelectObject等等......但当时图像已经发送到目标窗口,我没有机会改造它。

0 投票
0 回答
184 浏览

c# - C# 放大 API 全屏句柄

初始化放大 API 并调用“MagSetFullscreenColorEffect”方法时,屏幕会自动更改颜色以匹配您调用的任何数组。这需要相对较少的代码:

这立即使屏幕变为负数,这意味着 Magnification API 已经在创建全屏点击窗口。我想知道如何获取此窗口的句柄,并引用它以将颜色更改为新数组(IE,“NotNegative”)

下面的代码演示了我在哪里尝试使用“GetForeGroundWindow”命令来捕获放大 API HWND,然后尝试使用“MagSetColorEffect”方法更改该窗口的颜色。这没有成功。问题:

  • 如何找到 Magnification API 正在使用的句柄?
  • Windows API 何时创建此句柄/窗口?在初始化期间,还是在 magsetfullscreen 方法中?
  • 为什么下面的代码不改变我的窗口颜色?

注意:我知道我可以使用 MagnificationSetFullscreen 再次更改颜色。我也知道我可以创建自己的放大窗口,如放大 API 概述中所示。不过,我很懒,想用窗口好像API已经在创建了。

0 投票
1 回答
121 浏览

c# - 在 Windows 10 放大镜工具“背后”抓取屏幕像素数据

我想知道当 Windows 放大镜工具在全屏模式下运行时是否可以捕获整个屏幕视图。本质上,我正在寻找的是当我用眼睛看屏幕上的某个点时,只有屏幕上的某个点显示在我的显示器上,我希望能够打印整个屏幕没有关闭放大镜的原始屏幕。不知道如何比这更好,更清楚地表达它。我知道可以通过Graphics类获取屏幕像素信息,如下所示:

但这并不排除放大镜对屏幕的影响,只是在用户看到的时候抓取它。理想情况下,我希望能够抓住整个屏幕,因为如果放大镜工具不是仅放大一部分,则应该可以看到它,如果这有意义的话。整个屏幕空间,即使只有一部分可见。

我快速浏览了Magnification API文档页面,但我不知道这是否真的是我应该看的地方。还有什么我可以做的吗?如果有人指出我正确的方向,我将不胜感激,因为我似乎在绕圈子。

非常感谢!