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

  

java调用QQ影音进行截图的更多相关文章

  1. Java调用摄像头截图

    使用webcam-capture替换JMF调用摄像头 最近有个需要通过java调用摄像头,并截图的需求,在网上找了下资料,大部分是用一个叫jmf的库,但是jmf已经几百年没有更新,用起来各种问题.后来 ...

  2. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

  3. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

  4. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  5. 原创QQ影音DLL劫持漏洞+动画实战教程

    1.什么是DLL DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成 ...

  6. paip.java 调用c++ dll so总结

    paip.java 调用c++ dll so总结 ///////JNA (这个ms sun 的) 我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA ...

  7. Winform调用QQ发信息并且开机启动 (开源)

    前言 公司CS系统需要加入启动qq从winform调用qq聊天窗口的功能,前提是需要将聊天者的QQ号码作为参数传递到函数中,一直没有搞过,正好很感兴趣,就折腾,Winform调用qq,我想肯定是需要一 ...

  8. Java调用外部程序常用算法和封装类

    一个项目不可能只使用一种编程语言来开发,也不可能由一个人开发,所以,Java程序员要学会和使用其他编程语言的程序员合作.那么,让我来发布一个工具类--Java外接程序扩展包,并将相应算法发布.Java ...

  9. java调用Oracle存储存储过程

    数据库表和增删改的procedure参照(http://www.cnblogs.com/J-wym/p/3292913.html) 1.测试添加数据的procedure public void tes ...

  10. Java 调用执行其他语言的程序

    以 Java 调用 Python 为例 1. 使用 Runtime 类 该方式简单,但是增加了 Java 对python 的依赖,需要事先安装python,及python程序依赖的第三方库 Runti ...

随机推荐

  1. 【容斥、插值】P3270 [JLOI2016]成绩比较

    [容斥.插值]P3270 [JLOI2016]成绩比较 题目简述 有 \(n+1\) 个人,进行 \(m\) 场考试,第 \(i\) 场考试的可能得分是 \([0,U_i]\) 之间的整数. 假设你是 ...

  2. Python-使用openpyxl读取excel内容

    1. 本篇文章目标 将下面的excel中的寄存器表单读入并构建一个字典 2. openpyxl的各种基本使用方法 2.1 打开工作簿 wb = openpyxl.load_workbook('test ...

  3. 整数输入框 InputNumberIntZen.vue 只能输入整数 不能输入.等其他字符

    这版的输入限制堪称完美 perfect! 20230712 更新 加入 onBlurHandle 如果输入的02 失焦的时候 变成2 <!--数字输入框 只能输入数字 整型 InputNumbe ...

  4. Window10系统通过软件切换扬声器与耳机的音源输出

    原文地址: Window10系统通过软件切换扬声器与耳机的音源输出 - Stars-One的杂货小窝 个人平常一般使用扬声器,但有时候直播或和别人打游戏的时候,可能会带上耳机 目前的情况就是手动去插播 ...

  5. day06-JavaScript03

    JavaScript03 11.DOM 官方文档:https://www.w3school.com.cn/js/js_htmldom.asp 基本介绍: DOM全称是Document Object M ...

  6. [置顶] drools规则引擎因为内存泄露导致的内存溢出

    进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问 ...

  7. Google Chart API学习(三)

    书接上回: maps-charts: <html> <head> <script type="text/javascript" src="h ...

  8. jprofiler注册码共享

    name和company随意,license如下: L-Larry_Lau@163.com#36573-fdkscp15axjj6#25257 L-Larry_Lau@163.com#5481-ucj ...

  9. 数据好合: Argilla 和 Hugging Face Spaces 携手赋能社区合力构建更好的数据集

    最近,Argilla 和 Hugging Face 共同 推出 了 Data is Better Together 计划,旨在凝聚社区力量协力构建一个对提示进行排名的偏好数据集.仅用几天,我们就吸引了 ...

  10. Clang Preprocessor 类的创建

    参考: Create a working compiler with the LLVM framework, Part 2 How to parse C programs with Clang: A ...