java - कब्जा करने से खिड़की छोड़ें




winapi flex (2)

मैंने एक एआईआर एप्लीकेशन बनाया है जिसमें दो खिड़कियां हैं। पहला मुख्य विंडो (स्पार्क विंडो वाला एप्लीकेशन) है और दूसरा एक घटक (स्पार्क विंडो) है। मैं फ्लेक्स-जावा ब्रिज फ्लेरी के साथ डेस्कटॉप स्क्रीन को कैप्चर करने के लिए जावा का उपयोग कर रहा हूं।

स्क्रीन को कैप्चर करने के लिए कोड यहां दिया गया है: -

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

मैं मुख्य फ्लेक्स खिड़की पर कब्जा नहीं करना चाहता। इसे कब्जा करने से (पारदर्शी) छोड़ दिया जाना चाहिए।

क्या फ्लेक्स प्रोजेक्ट की कॉन्फ़िगरेशन बदलकर यह संभव है?

यदि यह फ्लेक्स और जावा में नहीं किया जा सकता है, तो यह किस प्लेटफ़ॉर्म में किया जा सकता है?


अगर मैं आपकी समस्या को सही ढंग से समझ गया।

आप संपूर्ण एप्लिकेशन या किसी विशेष घटक का स्क्रीनशॉट लेने के लिए फ्लेक्स / एएस 3 फ़ंक्शन में निर्मित का उपयोग कर सकते हैं, फिर इसे सहेजने के बजाय बाइटियर और PngEncoder (या जेपीजेएनकोडर यदि आप चाहें) में कनवर्ट करें ...

यहां एक उदाहरण दिया गया है:

<?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(); ) या अल्फा को 0 ( this.alpha=0 ) पर सेट करें।
  2. स्क्रीनशॉट लें
  3. एप्लिकेशन को अधिकतम करें ( this.maximize(); ) या अल्फा को 1 ( this.alpha=0 ) पर सेट करें।

एक समाधान जो मैं सोच सकता हूं वह यह है कि आप "अवांछित" विंडो को कैप्चर करने से बाहर ले जा सकते हैं। (0,0 समन्वय नीचे) इस तरह के कुछ कोड के साथ।

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

और से

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




jna