gpt4 book ai didi

java - 跳过窗口被捕获

转载 作者:IT老高 更新时间:2023-10-28 20:41:40 25 4
gpt4 key购买 nike

我创建了一个 AIR 应用程序,它有两个窗口。第一个是主窗口(spark Windowed Application),第二个是组件(spark window)。我正在使用 Java 通过 Flex-Java Bridge Flerry 捕获桌面屏幕。

这是捕获屏幕的代码:-

HDC hdcWindow = User32.INSTANCE.GetDC(hWnd);
HDC hdcMemDC = GDI32.INSTANCE.CreateCompatibleDC(hdcWindow);
RECT bounds = new RECT();
User32Extra.INSTANCE.GetClientRect(hWnd, bounds);

int width = bounds.right;
int height = bounds.bottom ;
HBITMAP hBitmap = GDI32.INSTANCE.CreateCompatibleBitmap(hdcWindow, width, height);

HANDLE hOld = GDI32.INSTANCE.SelectObject(hdcMemDC, hBitmap);
GDI32Extra.INSTANCE.BitBlt(hdcMemDC, 0, 0, width, height, hdcWindow, 0, 0, WinGDIExtra.SRCCOPY);

我不想捕获主弹性窗口。它应该跳过(透明)被捕获。

是否可以通过更改 flex 项目的配置来实现?

如果在flex和java中都做不到,在什么平台上可以做到?

最佳答案

如果我理解正确你的问题。

您可以使用内置的 Flex/as3 功能截取整个应用程序或特定组件的屏幕截图,然后转换为 bytearray 和 PngEncoder(或 JPGEncoder,如果您愿意),而不是保存...

这是一个例子:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx">
<fx:Script>
<![CDATA[
import mx.graphics.codec.PNGEncoder;

private function takeSnapshot(comp:DisplayObject):void {
var bitmapData:BitmapData = new BitmapData(comp.width,comp.height,false,0x00000000);
bitmapData.draw(comp, new Matrix());

var fileStream:FileStream = new FileStream();
fileStream.open(File.desktopDirectory.resolvePath("screenshot.png"), FileMode.UPDATE);
fileStream.writeBytes(new PNGEncoder().encode(bitmapData));
}
]]>
</fx:Script>
<s:BorderContainer width="100%" height="100%" backgroundColor="#ff00ff">
<s:Label text="this text and box should be saved"/>
<s:BorderContainer width="25%" height="25%" backgroundColor="#ffff00" horizontalCenter="0"
id="extended"
verticalCenter="0">
<s:Label text="this text and box should be saved" width="100%" maxDisplayedLines="5"/>
</s:BorderContainer>
</s:BorderContainer>
<s:Button bottom="0" left="0" label="screen" click="takeSnapshot(extended)"/>
</s:WindowedApplication>

编辑:

我以为我误解了请求..

我能想到的唯一方法是:

  1. 最小化应用程序 (this.minimize();) 或将 alpha 设置为 0 (this.alpha=0)。
  2. 截图
  3. 最大化应用程序 (this.maximize();) 或将 alpha 设置为 1 (this.alpha=0)。

关于java - 跳过窗口被捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30905868/

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