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 ...
随机推荐
- 学习ASP.NET MVC 编程系列文章目录
学习ASP.NET MVC(一)--我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)--我的第一个ASP.NET MVC 控制器 学习ASP.NET MVC(三)--我的第一 ...
- liunx上安装django ,启动uwsgi ,语音播报python实现过程
由于需要做一个语音播报实现,用到的技术是python ,需要事先搭环境,安装uwsgi djagno环境,以下内容为百度上找到的好一点的内容,确实照着做成功了,转载一下,下次更好找资料 liunx ...
- Jenkins 批量修改Job的配置
登录Jenkins机器,执行 以下shell 脚本 --单文件替换 sed -i "s#xxxxx#xxxxxx#g" /var/lib/docker/volumes/jenkin ...
- using用法总结
一.命名空间的使用 不再赘述. 二.在子类中改变基类成员的访问权限 using可以将public和protected的基类成员的访问权限改为public.protected.private,注意,us ...
- 3DCAT首届行业生态交流会|瑞云科技技术总监赵志杰:实时渲染助力元宇宙应用触手可及
2021年12月17日下午,由深圳市瑞云科技有限公司主办,深圳市虚拟现实产业联合会协办的 云XR如何赋能元宇宙--3DCAT实时云渲染首届行业生态合作交流会 圆满落幕.此次活动围绕 "云XR ...
- 观展新体验!3DCAT助力青桔 “未来之见”线上发布会炫酷亮相
在"未来之见"滴滴青桔2021新品发布会现场,青桔推出概念车"青桔X","X"代表了无限可能和憧憬,街边的共享单车?这只是其中一面,青桔为您 ...
- tomcat无法启动的解决方法
一:双击startup.bat但闪退 我们可以用记事本打开startup.bat 在末尾添加一个pause 这样它就会新建一个窗口停在错误的地方 二:根据报错信息改正 这一步如果有乱码可以进入tomc ...
- WebView开源库终极方案
目录介绍 01.前沿说明 1.1 案例展示效果 1.2 该库功能和优势 1.3 相关类介绍说明 1.4 WebView知识点 02.如何使用 2.1 如何引入 2.2 最简单使用 2.3 常用api ...
- 记录--你还在傻傻的npm run serve吗?快来尝尝这个!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 背景 大家在日常开发中应该经常会有需要切换不同环境地址的情况.当一个项目代码切换环境地址时,vue-cli没有能够感知文件的变化,所以代理 ...
- KafkaProducerDemo
package com.lxw.kafkademo; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache ...