我目前正在编写一个小脚本,用于在BlueStacks中捕获硬件加速窗口的屏幕截图。
问题是,该窗口似乎必须是硬件加速的,所以屏幕截图保存了一个黑色方块。
我使用AutoHotkey编写脚本,并添加了用于访问GDI+的GDIp库。
我怀疑问题是由于软件直接将帧推送到图形处理器,GDIp无法使用PrintWindow捕获数据,但必须有一种方法来捕获此帧。
我的脚本:
#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
要捕获的实际屏幕:
我的脚本实际输出的文件:
有没有关于去哪里的想法,或者关于如何访问帧缓冲区的任何类型的指令?这不可能是以前没有人需要做的事情。
发布于 2015-03-26 02:26:09
我也在寻找解决方案。不管怎样,我用另一种方式写的:
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,但是如果你的客户区有固定的大小(大多数情况下),这会更快-不需要额外的计算。
https://stackoverflow.com/questions/29245949
复制相似问题