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();
}
}
}
java调用QQ影音进行截图的更多相关文章
- Java调用摄像头截图
使用webcam-capture替换JMF调用摄像头 最近有个需要通过java调用摄像头,并截图的需求,在网上找了下资料,大部分是用一个叫jmf的库,但是jmf已经几百年没有更新,用起来各种问题.后来 ...
- 分享:写了一个 java 调用 C语言 开发的动态库的范例
分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h 代码#pragma once#ifdef __cplusplusextern "C" {#e ...
- 分享:根据webservice WSDL地址自动生成java调用代码及JAR包
分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...
- java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊
java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...
- 原创QQ影音DLL劫持漏洞+动画实战教程
1.什么是DLL DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成 ...
- paip.java 调用c++ dll so总结
paip.java 调用c++ dll so总结 ///////JNA (这个ms sun 的) 我目前正做着一个相关的项目,说白了JNA就是JNI的替代品,以前用JNI需要编译一层中间库,现在JNA ...
- Winform调用QQ发信息并且开机启动 (开源)
前言 公司CS系统需要加入启动qq从winform调用qq聊天窗口的功能,前提是需要将聊天者的QQ号码作为参数传递到函数中,一直没有搞过,正好很感兴趣,就折腾,Winform调用qq,我想肯定是需要一 ...
- Java调用外部程序常用算法和封装类
一个项目不可能只使用一种编程语言来开发,也不可能由一个人开发,所以,Java程序员要学会和使用其他编程语言的程序员合作.那么,让我来发布一个工具类--Java外接程序扩展包,并将相应算法发布.Java ...
- java调用Oracle存储存储过程
数据库表和增删改的procedure参照(http://www.cnblogs.com/J-wym/p/3292913.html) 1.测试添加数据的procedure public void tes ...
- Java 调用执行其他语言的程序
以 Java 调用 Python 为例 1. 使用 Runtime 类 该方式简单,但是增加了 Java 对python 的依赖,需要事先安装python,及python程序依赖的第三方库 Runti ...
随机推荐
- 摆脱鼠标系列 - 打开微信(Alt+V) - 打开双核浏览器(Alt+S) - HotkeyP
摆脱鼠标系列 - 打开微信(Alt+V) - 打开双核浏览器(Alt+S) - HotkeyP 新定义了两个快捷键 这两个比较常用
- PE文件手工压缩
序 本文要压缩的PE文件来自软件漏洞这门课上布置的作业,代码逻辑很简单,直接运行就能看出来,就是调库来弹两个对话窗口.笔者主要记录一下对这个文件的分析和一步步实现手工压缩的过程.在此提供原文件的下载方 ...
- 百度api经历
底部参考文档,欢迎点击:https://www.runoob.com/http/http-content-type.html 这两天遇到了点糟心事,因为小伙伴走了.然后事情起因是这样的,来了个任务封装 ...
- HMAC算法:数据传输的保护神
HMAC算法起源: HMAC(Hash-based Message Authentication Code)算法是由Mihir Bellare.Ran Canetti和Hugo Krawczyk于19 ...
- 【STM32F4 HAL】MPU6050食用
关于MPU6050模块的食用>_<(本人比较菜,写的不好或有错误的地方欢迎大佬指出) 最近学校冬令营发了个MPU6050模块,第一次弄也花了我花了不少时间,于是就把其中一些步骤以及要点简单 ...
- Android端Charles抓包
目录介绍 01.下载安装 02.抓包代理设置 03.抓包Https操作 04.抓包原理介绍 05.抓包数据介绍 06.常见问题总结 07.Android拦截抓包 01.下载安装 下载地址(下载对应的平 ...
- 应急响应靶机训练-Linux1
靶机来源: 知攻善防实验室公众号 https://mp.weixin.qq.com/s/gCWGnBiwbqSnafXU1apJCA 我是在另一台主机上通过ssh连接到靶机进行解题的,以下为解题记录. ...
- vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.如何部署 前后端分离开发模式下,前后端是独立布署的,前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道 ...
- TP6框架--EasyAdmin总结:暂时的离别和新的开始
眨眼一下,因为项目初期开发的完成,我与EasyAdmin的缘分也将迎来短暂的离别,有时候静下来,感觉时间过的好快,我从4月到现在,使用EasyAdmin进行项目开发,从一个初识别PHP的菜鸟,到一个能 ...
- IdentityServer4 如何修改绑定路径
最近用Nginx配置了下IdentityServer4然后客户端访问就开始报错,说是路径不一致,我Nginx配置的是 /ids/指向了内部的localhost:5555路径 然后外部网络访问ip:/i ...