ventanas tipos ejemplos crear como clase java winapi flex air jna

tipos - jframe en java pdf



Omitir ventana de ser capturado (2)

Creé una aplicación de AIR que tiene dos ventanas. El primero es la ventana principal (aplicación de chispa en ventana) y el segundo es un componente (ventana de chispa). Estoy usando Java para capturar la pantalla del escritorio con Flex-Java Bridge Flerry.

Aquí está el código para capturar la pantalla que es:

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);

No quiero que se capture la ventana flexible principal. Se debe omitir (transparente) para que no se capture.

¿Es eso posible cambiando la configuración de flex project?

Si no se puede hacer en flex y java, ¿en qué plataforma se puede hacer?


Si entendí correctamente tu problema.

Puede usar la función incorporada Flex / as3 para tomar una captura de pantalla de toda la aplicación o un componente en particular, luego convertirla en bytearray y PngEncoder (o JPGEncoder si lo prefiere), luego guardarla ...

Aquí hay un ejemplo:

<?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>

EDITAR:

Como pensé, malentendí la solicitud ...

La única forma en que puedo pensar es:

  1. Minimice la aplicación ( this.minimize(); ) o establezca el alfa en 0 ( this.alpha=0 ).
  2. Toma la captura de pantalla
  3. Maximice la aplicación ( this.maximize(); ) o establezca el alfa en 1 ( this.alpha=0 ).

Una solución en la que puedo pensar es que puedes mover las ventanas "no deseadas" de la captura. (Por debajo de la coordenada 0,0) con algún código como este.

public void foo(){ this.xCoord = -this.xCoord; this.yCoord = -this.yCoord; } //Im not sure about the exact syntax but you should get the idea.

y que

foo(); capture(); foo();