首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AutoHotkey-GDIp:从硬件加速窗口捕获屏幕截图

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

Stack Overflow用户
提问于 2015-03-25 09:28:21
回答 1查看 4.2K关注 0票数 1

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

问题是,该窗口似乎必须是硬件加速的,所以屏幕截图保存了一个黑色方块。

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

我怀疑问题是由于软件直接将帧推送到图形处理器,GDIp无法使用PrintWindow捕获数据,但必须有一种方法来捕获此帧。

我的脚本:

代码语言:javascript
运行
复制
#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

要捕获的实际屏幕:

我的脚本实际输出的文件:

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

EN

回答 1

Stack Overflow用户

发布于 2015-03-26 02:26:09

我也在寻找解决方案。不管怎样,我用另一种方式写的:

代码语言:javascript
运行
复制
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,但是如果你的客户区有固定的大小(大多数情况下),这会更快-不需要额外的计算。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29245949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档