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 ...
随机推荐
- async await $api vue
async getDataNew () { const res = await this.$api('apiPath') if (res && res.status === 20) { ...
- ulimit.conf中soft和hard区别及常用配置
在Linux中,ulimit命令用于限制用户对shell资源的访问,包括进程数.文件打开数等.这些限制可以分为软限制(soft limit)和硬限制(hard limit). 软限制(soft lim ...
- stm32 串口DMA源码解析
一 DMA协议: DMA是STM32内的一个硬件模块,它独立于CPU在外围设备和内存之间进行数据传输,解放了CPU.每个型号的STM32 MCU有1-2个DMA,每个DMA有一定数量的Channel ...
- IDEA设置Maven华为镜像仓库
国内开发者由于网络原因,直接从中央仓下载第三包速度较慢或不稳定,使用国内镜像站可以很好解决该问题. 下面就介绍下如何将华为开源镜像站配置为maven的默认第三方库下载源. 1.打开系统用户目录&quo ...
- CSS(相对定位relative、绝对定位absolute、固定定位fixed、定位应用、元素的显示和隐藏)
一. 定位(position) 介绍 1.1 为什么使用定位 我们先来看一个效果,同时思考一下用标准流或浮动能否实现类似的效果? 场景1: 某个元素可以自由的在一个盒子内移动位置,并且压住其他盒子. ...
- 崩溃bug日志总结3
目录介绍 1.1 OnErrorNotImplementedException[ Can't create handler inside thread that has not called Loop ...
- 【OpenCV】OpenCV (C++) 与 OpenCvSharp (C#) 之间数据通信
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux.Windows.Android和Mac OS操作系统上. 它轻量级而且高效--由一 ...
- KingbaseES 数据库中不同user的视图访问授权
前言 本文的目的是实现u1用户访问ud用户下的视图权限. 测试 登录system用户并创建schema,user,并授权schema的有关权限给ud用户 TEST=# select current_u ...
- KingbaseES 服务器运行参数配置
Kingbase 服务器运行参数配置 说明: KingbaseES 数据库中,服务器运行参数配和需改有多种方式和注意事项,根据不同的分类配置,修改配置方式不同.关于服务器参数分类请参照[Kingbas ...
- archlinux xfce 设置窗口背景颜色,QT背景颜色
1.使用xfce主题 2.有QT背景不覆盖,使用配置 sudo pacman -S qt5-ct 3.在/etc/environment添加环境变量 QT_QPA_PLATFORMTHEME=qt5c ...