java調用QQ影音進行截圖

import java.awt.Graphics2D;
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.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.util.Collection;

import javax.imageio.ImageIO;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;

public class Test {
	private static Robot robot = null;

	public static void main(String[] args) throws Exception {
		String folderPath = args.length > 0 ? args[0] : "C:\\Users\\Administrator\\Documents\\Tencent Files";
		Collection<File> files = FileUtils.listFiles(new File(folderPath), new String[] { "flv", "mp4" }, true);
		robot = new Robot();
		// switchTask();

		openQQPlayer();
		Thread.sleep(500);
		System.out.println("切換任務成功>....................");
		Thread.sleep(500);
		for (File file : files) {
			openFile(file.getAbsolutePath());
			Thread.sleep(1500);
			fastPlay();
			Thread.sleep(1500);
			pauseOrPlay();
			Thread.sleep(1500);
			capture();
			Thread.sleep(500);
			saveImg(FilenameUtils.getBaseName(file.getName()));
		}

	}

	/**
	 * 打開QQ影音
	 */
	private static void openQQPlayer() {
		press(KeyEvent.VK_WINDOWS, KeyEvent.VK_DOWN);
		press(KeyEvent.VK_WINDOWS, KeyEvent.VK_DOWN);
		press(KeyEvent.VK_WINDOWS, KeyEvent.VK_R);
		robot.delay(100);
		setIntoClipboard("C:/Program Files (x86)/Tencent/QQPlayer/QQPlayer.exe");
		press(KeyEvent.VK_CONTROL, KeyEvent.VK_V);
		robot.delay(100);
		press(KeyEvent.VK_ENTER);
	}

	/**
	 * 從剪貼板獲取圖片
	 * 
	 * @return
	 * @throws Exception
	 */
	public static Image getImageFromClipboard() throws Exception {
		Clipboard sysc = Toolkit.getDefaultToolkit().getSystemClipboard();
		Transferable cc = sysc.getContents(null);
		if (cc == null) {
			return null;
		} else if (cc.isDataFlavorSupported(DataFlavor.imageFlavor)) {
			return (Image) cc.getTransferData(DataFlavor.imageFlavor);
		}
		return null;

	}

	/**
	 * 保存圖片
	 * 
	 * @param fileName
	 */
	public static void saveImg(String fileName) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				try {
					Image image = getImageFromClipboard();
					while (image == null) {
						image = getImageFromClipboard();
					}

					BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null),
							BufferedImage.TYPE_INT_ARGB);
					Graphics2D g = bufferedImage.createGraphics();
					g.drawImage(image, null, null);
					// ImageIO.write((RenderedImage)bufferedImage, "jpg", file);
					File f = new File("D:/capture/");
					if (!f.exists()) {
						f.mkdirs();
					}
					ImageIO.write((RenderedImage) bufferedImage, "png", new File("D:/capture/" + fileName + ".png"));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}).start();
	}

	/**
	 * 調用QQ影音快捷鍵打開視頻文件
	 * 
	 * @param path
	 */
	public static void openFile(String path) {
		press(KeyEvent.VK_CONTROL, KeyEvent.VK_O);
		setIntoClipboard(path);
		clearTexBox();
		press(KeyEvent.VK_CONTROL, KeyEvent.VK_V);
		press(KeyEvent.VK_ENTER);
	}

	/**
	 * 清空文本框
	 * 
	 * @param path
	 */
	public static void clearTexBox() {
		robot.keyPress(KeyEvent.VK_BACK_SPACE);
		robot.delay(500);
		robot.keyRelease(KeyEvent.VK_BACK_SPACE);
	}

	/**
	 * 快進播放
	 */
	public static void fastPlay() {
		press(KeyEvent.VK_CONTROL, KeyEvent.VK_RIGHT);
	}

	/**
	 * alt+tab切換任務
	 */
	public static void switchTask() {
		press(KeyEvent.VK_ALT, KeyEvent.VK_TAB);
	}

	/**
	 * 播放/暫停
	 */
	public static void pauseOrPlay() {
		press(KeyEvent.VK_SPACE);
	}

	/**
	 * 切換下一個視頻
	 */
	public static void switchNextVideo() {
		press(KeyEvent.VK_PAGE_DOWN);
	}

	/**
	 * 設置剪貼板內容
	 * 
	 * @param data
	 */
	public static void setIntoClipboard(String data) {
		Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
		StringSelection ss = new StringSelection(data);
		clipboard.setContents(ss, null);
	}

	/**
	 * 調用QQ影音截圖
	 * 
	 * @throws Exception
	 */
	public static void capture() throws Exception {
		press(KeyEvent.VK_ALT, KeyEvent.VK_A);
		robot.delay(50);
		press(KeyEvent.VK_ENTER);
		robot.delay(50);
	}

	/**
	 * 控制鍵盤按鍵輸入指定不含中文的字符串
	 * 
	 * @param s
	 */
	public static void pressCode(String s) {
		char[] ch = s.toCharArray();
		press(ch);
	}

	/**
	 * 控制鍵盤按鍵輸入指定不含中文的字符串
	 * 
	 * @param s
	 */
	public static void press(String s) {
		press(s.toCharArray());
	}

	/**
	 * 控制鍵盤按鍵輸入指定鍵碼
	 * 
	 * @param s
	 */
	private static void press(int... keycode) {
		for (int key : keycode) {
			robot.keyPress(key);
		}

		robot.delay(150);

		for (int key : keycode) {
			robot.keyRelease(key);
		}
	}

	/**
	 * 控制鍵盤按鍵輸入指定字符
	 * 
	 * @param s
	 */
	private static void press(char... keycode) {
		char errorKey = ' ';
		try {
			for (int key : keycode) {
				errorKey = (char) key;
				if (key == ':') {
					robot.keyPress(KeyEvent.VK_SHIFT);
					robot.keyPress(KeyEvent.VK_SEMICOLON);

					robot.delay(150);

					robot.keyRelease(KeyEvent.VK_SHIFT);
					robot.keyRelease(KeyEvent.VK_SEMICOLON);

				} else if (key == '.') {
					robot.keyPress(KeyEvent.VK_PERIOD);
					robot.delay(150);
					robot.keyRelease(KeyEvent.VK_PERIOD);
				} else if ('a' <= key && key <= 'z') {
					robot.delay(20);
					robot.keyPress(key - ' ');
					robot.delay(20);
					robot.delay(20);
					robot.keyRelease(key - ' ');
				} else if ('A' <= key && key <= 'Z') {
					robot.keyPress(KeyEvent.VK_SHIFT);
					robot.delay(20);
					robot.keyPress(key);
					robot.delay(20);
					robot.keyRelease(KeyEvent.VK_SHIFT);
					robot.delay(20);
					robot.keyRelease(key);
				} else {
					robot.keyPress(key);
				}
			}

			robot.delay(150);
			for (int key : keycode) {
				if (key == ':' || key == '.') {
					continue;
				} else if ('a' < key && key <= 'z') {
					continue;
				} else if ('A' <= key && key <= 'Z') {
					continue;
				} else {
					robot.keyRelease(key);
				}
			}
		} catch (Exception e) {
			System.out.println(errorKey);
			e.printStackTrace();
		}
	}
}

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章