package read;

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.image.PixelGrabber;

/**
 * 画面読み込みクラス
 */
public class ReadUi2 {

    /**
     * メインメソッド
     * 
     * @param args  起動パラメータ（なし）
     */
    public static void main( String[] args ) {

        try {
            ReadUi2 main = new ReadUi2();
        }
        catch ( AWTException e ) {
            // TODO 自動生成された catch ブロック
            e.printStackTrace();
        }
        
    }

    /**
     * コンストラクタ
     * 
     * @throws AWTException
     */
    private ReadUi2()
        throws AWTException {

        try {
            // PrintScreenを実施
            Robot robot = new Robot();
            robot.keyPress( KeyEvent.VK_PRINTSCREEN );
        }
        catch ( AWTException e ) {
            
            System.out.println( "画面ハードコピー取得エラー" );
            e.printStackTrace();
            
            return;
        }

        
        // 画面サイズを取得
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        
        // 画面サイズ（横）
        int aWidth = (int) screenSize.getWidth();
        // 画面サイズ（縦）
        int aHeight = (int) screenSize.getHeight();


        // ピクセル情報
        int aPixels[] = new int[aWidth * aHeight];

        // 画面のハードコピー画像を取得
        Image aImage = getImageFromClipboard( null );

        try {
            // 画像をピクセル情報に格納
            PixelGrabber aPixelGrabber
                = new PixelGrabber(
                        aImage, 0, 0, aWidth, aHeight, aPixels, 0, aWidth);
            aPixelGrabber.grabPixels();
        }
        catch ( InterruptedException e ) {
            
            System.out.println( "画像読み込みエラー" );
            e.printStackTrace();
        }
        
        
        int aRed = 0;
        int aGreen = 0;
        int aBlue = 0;
        Color aColor = null;
        Robot robot = null;
        
        for ( int i = 0; i < aPixels.length; i++ ) {
            
            // ピクセル情報をColorで取得
            aColor = new Color( aPixels[i] );
            
            // RGBを取得
            aRed = aColor.getRed();
            aGreen = aColor.getGreen();
            aBlue = aColor.getBlue();
            
            // 赤色の場合
            if ( (aRed == 255) && (aGreen == 175) && (aBlue == 175) ) {
                
                // マウスを当該箇所に移動
                robot = new Robot();
                robot.mouseMove( i % aWidth, i / aWidth );
                
                // マウスをクリック
                robot.mousePress( InputEvent.BUTTON1_MASK );
                robot.mouseRelease( InputEvent.BUTTON1_MASK );
                
		try{ Thread.sleep(3000);}catch(Throwable t){};

                // 文字を入力
                robot.keyPress( KeyEvent.VK_SHIFT );
                robot.keyPress( KeyEvent.VK_A );
                robot.keyRelease( KeyEvent.VK_SHIFT );
                robot.keyRelease( KeyEvent.VK_A );
                robot.keyPress( KeyEvent.VK_B );
                robot.keyRelease( KeyEvent.VK_B );
                robot.keyPress( KeyEvent.VK_0 );
                robot.keyRelease( KeyEvent.VK_0 );
                robot.keyPress( KeyEvent.VK_1 );
                robot.keyRelease( KeyEvent.VK_1 );
                
                break;
            }
        }
    }
    
    /**
     * クリップボードから画像を取得する。
     * 
     * @param pRequestor  要求元（nullの設定可）
     */
    public Image getImageFromClipboard( Object pRequestor ) {
        
        Clipboard aClipboard
            = Toolkit.getDefaultToolkit().getSystemClipboard();
        Transferable aTransferable = aClipboard.getContents(pRequestor);
        
        // クリップボードが空の場合
        if ( aTransferable == null ) {
            
            return null;
        }
        
        // クリップボードで扱える形式のうち、Imageが扱えるものを検索
        DataFlavor[] aFlavors = aTransferable.getTransferDataFlavors();
        DataFlavor aImageflavor = null;
        
        for ( int i = 0; i < aFlavors.length; i++ ) {
            
            if( aFlavors[i].getRepresentationClass().equals(Image.class) ) {
                
                aImageflavor = aFlavors[i];
                break;
            }
        }
        
        if ( aImageflavor == null ) {
            return null;
        }
        
        // Imageを取得
        try {
            
            Image aImage = (Image) aTransferable.getTransferData(aImageflavor);
            return aImage;
        }
        catch( Exception e ) {
            
            System.out.println( "画像取得エラー" );
            e.printStackTrace();
        }
        
        return null;
    }
}
