2012-09-04 23 views
5

[के लिए विंडोज] मैं जानता हूँ कि यह एक DirectX सी # भाषा के तहत चल रहा कार्यक्रम के स्क्रीन पर कब्जा करने के लिए संभव है, लेकिन आप जावा के लिए कुछ नमूना कोड पता है?पूर्ण स्क्रीन पर कब्जा (Javacv?)

मुझे वास्तव में इस Take screen shots inside of full screen applications with java? की तुलना में एक ही समस्या का सामना करना पड़ रहा है। रोबोट वर्ग ने मदद नहीं की और न ही काम किया।

लेकिन फिर भी मुझे इस बारे में इंटरनेट पर जावा कोड का कोई नमूना नहीं मिला। इस विषय पर आप जो भी सहायता प्रदान कर सकते हैं, उसके लिए धन्यवाद।

+0

कर देखें कि कहीं [ScreenshotUsingPrintScreen] (http://stackoverflow.com/a/12251447/418556) एक 'माइम प्रकार = छवि/एक्स जावा का उत्पादन -image; representationclass = java.awt.Image'। –

+0

समस्या को स्कर्ट करने के लिए दिलचस्प, अच्छा तरीका और विचार। कुछ त्वरित जांच के बाद मुझे क्लिपबोर्ड के बारे में एक त्रुटि मिली। जैसे कि विंडोज़ पर दूसरी प्रक्रिया द्वारा इसका इस्तेमाल किया गया था, मुझे लगता है। – Arsenic

+0

getSystemClipBoard से पहले cb को शून्य करने में इसे हल करने में हल किया गया है, इस तरह यह हर पूर्व विंडोज उपयोग को बस साफ़ करता है। – Arsenic

उत्तर

2

जब से मैं इस पर काम अधिक, यह भी देखें:

import java.awt.*; 
import java.awt.datatransfer.*; 
import java.awt.event.KeyEvent; 
import java.awt.image.BufferedImage; 
import javax.swing.*; 

import javax.imageio.ImageIO; 
import java.io.File; 

public class ClipboardScreenshot { 

    public static void main(String[] args) throws Exception { 
     // get the screenshot 
     Robot robot = new Robot(); 
     robot.keyPress(KeyEvent.VK_PRINTSCREEN); 
     robot.delay(40); 
     robot.keyRelease(KeyEvent.VK_PRINTSCREEN); 
     robot.delay(404); 

     Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard(); 
     DataFlavor[] flavors = cb.getAvailableDataFlavors(); 
     System.out.println("After: "); 
     for (DataFlavor flavor : flavors) { 
      System.out.println(flavor); 
      if (flavor.toString().indexOf("java.awt.Image")>0) { 
       Object o = cb.getData(flavor); 
       Image i = (Image)o; 
       // ImageIO will not write an Image 
       // It will write a BufferedImage (a type of RenderedImage) 
       BufferedImage bi = new BufferedImage(
         i.getWidth(null), 
         i.getHeight(null), 
         BufferedImage.TYPE_INT_RGB); 
       Graphics2D g = bi.createGraphics(); 
       g.drawImage(i, 0, 0, null); 
       g.dispose(); 

       JScrollPane sp = new JScrollPane(new JLabel(new ImageIcon(bi))); 
       sp.setPreferredSize(new Dimension(800,600)); 
       JOptionPane.showMessageDialog(null, sp); 
       File f = new File(
         System.getProperty("user.home") + 
         File.separator + 
         "the.png"); 
       ImageIO.write(bi, "png", f); 
      } 
     } 
    } 
} 
+0

अच्छा विचार है, लेकिन वास्तव में पूर्ण स्क्रीन में डायरेक्टएक्स प्रोग्राम के लिए काम नहीं कर रहा है। बस कोशिश की, काम नहीं किया, अभी तक कोई विचार क्यों नहीं। जैसे कि दबाया और जारी किया गया कुंजी अक्षम कर दिया गया था। – Arsenic

+0

'उबंटू' पर 'PRINT_SCREEN' को सिमुलेट करने से' स्क्रीनशॉट प्रबंधक 'एप्लिकेशन लॉन्च होता है और उपयोगकर्ता को क्लिपबोर्ड पर ले जाने के लिए' क्लिपबोर्ड पर कॉपी करें 'बटन दबाया जाता है। –