AutoHotkey-GDIp:从硬件加速窗口捕获屏幕截图

2024-04-09

我目前正在编写一个小脚本,该脚本可以从 BlueStacks 中的硬件加速窗口捕获屏幕截图。

问题是,看起来窗口必须是硬件加速的,因此屏幕捕获保存了一个黑色方块。

我使用 AutoHotkey 编写脚本,并添加了 GDIp 库来访问 GDI+。

我怀疑问题在于GDIp无法使用PrintWindow抓取数据,因为软件将帧直接推送到GPU,但必须有一种方法来捕获该帧。

我的脚本:

#SingleInstance, Force
#NoEnv
SetBatchLines, -1
OnExit, Exit

#Include Gdip.ahk
#Include GDIpHelper.ahk

SetUpGDIP()

WinGet, hwnd, ID, BlueStacks App Player

pBitmap := Gdip_BitmapFromHWND(hwnd)

Gdip_SaveBitmapToFile(pBitmap, "TestOutput.png", 100)

Gdip_DisposeImage(pBitmap)

return

实际要捕获的屏幕:

The actual file output by my script: Black square, proper dimensions so it's seeing the right thing, but can't get the pixel data

关于去哪里的任何想法或者关于如何访问帧缓冲区的任何指令?这不可能是以前没有人需要做的事情。


我也在寻找解决方案。无论如何,我用另一种方式写了它:

pToken := Gdip_Startup()
winName := "BlueStacks App Player"
clientW := 868 ; set your client area width
clientH := 720 ; set your client area height
WinGetPos, x, y, w, h, %winName%
winBorder := (w-clientW)/2
x := x+winBorder
y := y+(h-clientH-winBorder)
snap := Gdip_BitmapFromScreen(x "|" y "|" clientW "|" clientH)
Gdip_SaveBitmapToFile(snap, "snap.png")
Gdip_DisposeImage(snap)
Gdip_ShutDown(pToken)

它不优雅但有效。 可能有一种简单的方法可以自动设置 clientW 和 clientH,但如果您的客户区域具有固定大小(大多数情况),这会更快 - 无需额外计算。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AutoHotkey-GDIp:从硬件加速窗口捕获屏幕截图 的相关文章

  • Autohotkey 错误的击键发送到控制台

    我正在尝试理解这个错误并寻找解决方法 使用这个脚本 NoEnv SingleInstance force SendMode Input Alt t to send keystrokes t Send It send the correct
  • 在 Google 代码上托管图像

    我想将我正在开发的项目的几个屏幕截图放在该项目的 wiki 和项目页面中谷歌代码 http code google com p pydlnadms 如何托管或附加图像文件 如果这不可能 我应该把它们放在哪里 Update0 这个问题催生了另
  • 避免处置系统定义的 Pen 和 Brush 实例

    我知道最好的做法是在实例上调用 Dispose Pen http msdn microsoft com en us library system drawing pen aspx and Brush http msdn microsoft
  • 如何在 AutoHotkey 中读取多行用户输入?

    我有一个 AutoHotkey 脚本 需要从用户读取多行员工数据 InputBox userInput Employee Records Please enter employee records One per line Unfortun
  • WPF:截屏的方法

    希望修改以下内容以从所有显示器上截取屏幕截图 我尝试过调整它 但我的图像是空白的 写入test png是为了测试 这byte 将被发送到接收应用程序 public byte Take int screenWidth Convert ToIn
  • 从另一个桌面捕获屏幕截图

    我使用创建了第二个桌面CreateDesktop我不会切换到它 我还在其中创建了一些进程 例如 Explorer exe 和 Winrar exe 接下来我有一个代码 它将当前桌面的屏幕截图保存到剪贴板 CreateDesktop 和 Sc
  • 使用 gdi+ 将 png 转换为 gif (C#)

    我有一个 png 文件 必须将其转换为 gif 文件 里面有一个透明的部分 当我保存它时 透明的部分是黑色的而不是透明的 这是我的代码 FileStream imgStream new FileStream outputFile FileM
  • 使用硬件加速内容截取 WKWebview 的屏幕截图

    我在截屏时遇到严重问题WKWebview内容当有硬件加速内容 一些在 iframe 内运行的特定赌场游戏 到目前为止 我使用了像大家建议的标准截图方式 UIGraphicsBeginImageContextWithOptions conta
  • AutoHotKey 键序列,不仅仅是单键热键

    I m not stupid really How do you map a key SEQUENCE ie Ctrl Q F in AutoHotKey I ve got Ctrl Q down q I ve even got F f 帮
  • 如何求整个网页的高度?

    我正在研究一种捕获网站屏幕截图的解决方案 我正在使用 slimerjs org 中提到的默认示例来完成工作 这个工具的屏幕截图非常棒 但我需要拍摄网站的全高屏幕截图 当捕获类似网站的屏幕时http www yellowpages com h
  • Windows 7 中一个进程的 GDI 对象上限是多少?

    有一个存在 GDI 泄漏的应用程序 最终会达到 10 000 个分配的 GDI 对象并崩溃 我尝试增加GDI进程句柄配额 http msdn microsoft com en us library windows desktop ms724
  • Python 是否有相当于 Java 的 AWT Robot 类? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有谁知道类似的Python类Java机器人 http java sun com javase 6 docs api java awt Ro
  • 使 GDI 绘图不可点击

    我有一个带有 GDI 绘图的透明 WinForms 应用程序 我将其用作覆盖层 问题是 每当我单击 GDI 绘图时 焦点就会转到应用程序窗口 我该如何扭转这种情况 您需要使用right颜色如TransparencyKey 一切使得Form
  • 在轨迹栏 ValueChanged 上触发事件,但不在代码中触发

    我希望能够在代码中修改轨迹栏的 value 属性 而不触发我的事件处理程序 我希望仅当用户通过拖动滑块或用键盘移动滑块来更改控件时才触发该事件 实现这一目标的最简单方法是什么 我有 6 个轨迹栏 我想根据更改的轨迹栏来更改其中 3 个的值
  • 删除图像上绘制的文本的顶部和底部填充

    我正在从指定的文本生成图像 但我面临一个问题 我无法删除生成的图像内绘制文本的顶部和底部填充 我尝试在使用时更改字符串格式Graphics DrawString 但我只设法删除了左右填充 private void button1 Click
  • 以编程方式截取网页屏幕截图[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VB.NET Custom Control(自定义绘图)刷新问题

    我用两个项目创建了一个简单的解决方案 第一个项目 类库 包含一个名为 Container 的自定义控件 它用圆角绘制自身 第二个项目 Windows 窗体 是一个测试应用程序 如果我在第二个项目的主窗体中添加一个容器实例 它会很好地显示圆角
  • 当使用客户端函数填充 DOM 时,如何等待从 puppeteer 中的 page.evaluate 函数加载所有图像

    我试图让代码执行等待所有图像加载之前木偶师截屏 当调用 initData 函数时 我的 DOM 会被填充 该函数是在客户端 js 文件中定义的 延迟或超时是一种选择 但我确信必须有一种更有效的方法来做到这一点 async dataObj g
  • Javafx-场景快照不显示值和系列

    我制作了一个非常短的应用程序 它使用 javafx 生成图表 应用程序显示正确的值 图表 但当我做快照时 图像仅显示轴和标签 但不显示系列和值 stage setTitle Line Chart Sample final DateAxis
  • 使用位图的保存方法覆盖图像

    我有一个 ASP NET C 页面 我正在其中调整文件夹中图像的大小 我正在使用 GDI 来执行此操作 我想调整图像大小并替换为旧图像 因此 当我尝试使用现有名称保存时 Save 方法会抛出错误 但如果我给出不同的名称 它就会被保存 但我希

随机推荐