[示例] 迅雷看看播放完成后自动关机

news/2024/11/17 2:28:52/
[i][b]迅雷看看播放完成后自动关机[/b][/i]
-----------------------------------------
使用说明:
本程序用于通过像素自动检测迅雷播放器播放时间,检测范围大致在全屏时或最大化时,总之窗口底部要在开始菜单上面不超过100像素的屏幕从左算起60%左右的矩形范围内.若播放器完成,播放时间会停止,从而实现关机之目的.
实现方案实在笨拙,请各位不要见笑.

下面是程序代码:
MyFrame

/**
*
*/
package tl.bisoft.java.apps;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Label;

/**
* @author cs
*
*/
public class MyFrame extends Frame {

private static final long serialVersionUID = 1L;

public static final Label LABEL = new Label();

public MyFrame(String name) {
super(name);
}

/**
* @param args
*/
public static void main(String[] args) {
MyFrame f = new MyFrame("");

f.setBackground(new Color(0xffffff01));
f.setForeground(Color.RED);
f.setAlwaysOnTop(true);
f.setUndecorated(true);
f.setBounds(PixelRobot.maxWidth - 100, PixelRobot.maxHeight - 20, 100, 20);

LABEL.setText("关机检测中...");
f.add(LABEL);

f.setVisible(true);

f.startApp(args);
}


public void startApp(String[] args) {
ShutService service = new ShutService();

if (args.length > 0) {
service.exec(args[0]);
} else {
service.exec("-s");
}
}

}



ShutService

package tl.bisoft.java.apps;

/**
* 关机服务
* @author cs
*/
public class ShutService {
/** 关机 */
private static final String SHUTDOWN = "-s";
/** 重启 */
private static final String RESTART = "-r";
/** 注销 */
private static final String LOGOUT = "-l";
/** 取消关机 */
private static final String CANCEL = "-a";

public void exec(String cmd) {
if (null != cmd) {
if (cmd.equals(SHUTDOWN)) {
PixelRobot.shutdown();
} else if (cmd.equals(RESTART)) {
XPShutDown sd = new XPShutDown();
sd.restart();
} else if (cmd.equals(LOGOUT)) {
XPShutDown sd = new XPShutDown();
sd.logout();
} else if (cmd.equals(CANCEL)) {
XPShutDown sd = new XPShutDown();
sd.cancel();
}
}
}
}



XPShutDown

package tl.bisoft.java.apps;

import java.io.IOException;

/**
* XP 系统关机API
* @author cs
*
*/
public class XPShutDown {

private static XPShutDown instance = new XPShutDown();
private static final String SHUTDOWN = "shutdown -s -f -t 60";
private static final String RESTART = "shutdown -r -f -t 0";
private static final String LOGOUT = "shutdown -l -f -t 0";
private static final String CANCEL = "shutdown -a";

public XPShutDown() {
}

public static XPShutDown getInstance() {
return instance;
}

public void exec(String cmd) {
try {
Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
System.out.println("执行失败!");
}
}

public void shutdown() {
exec(SHUTDOWN);
}

public void restart() {
exec(RESTART);
}

public void logout() {
exec(LOGOUT);
}
public void cancel() {
exec(CANCEL);
}

}




PixelRobot

package tl.bisoft.java.apps;

import java.awt.AWTException;
import java.awt.Color;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;

/**
* 像素处理机器人
* @author cs
*
*/
public class PixelRobot extends Robot implements Runnable {

private static final int STOP = 0;
private static final int RUN = 1;
private static final long DELAY = 5000L;
public static final int maxWidth = Toolkit.getDefaultToolkit()
.getScreenSize().width;
public static final int maxHeight = Toolkit.getDefaultToolkit()
.getScreenSize().height;

private static PixelRobot instance = null;

public Color[][] color1 = new Color[maxWidth][maxHeight];
public Color[][] color2 = new Color[maxWidth][maxHeight];

/** 线程状态 */
private int status = 0;

private PixelRobot() throws AWTException {
super();
}

public static PixelRobot getPixelRobot() {
if (null == instance) {
try {
instance = new PixelRobot();
} catch (AWTException e) {
e.printStackTrace();
}
}

return instance;
}

public static void shutdown() {
PixelRobot pr = PixelRobot.getPixelRobot();
pr.start();
}

/**
* 矩形检测屏幕区域,若约300S内像素RGB值相同时,执行关机操作.
*
* @return 像素RGB值是否相同
*/
public boolean test() {

moveMouse();

fetchScreenColor(color1, 0, 1000 * maxHeight/1080, 1500 * maxWidth / 1920,
maxHeight);
delay(DELAY);
fetchScreenColor(color2, 0, 1000 * maxHeight/1080, 1500 * maxWidth / 1920,
maxHeight);

return same(color1, color2, 0, 1000 * maxHeight/1080, 1500 * maxWidth / 1920,
maxHeight);
}

private void moveMouse() {
this.mouseMove(10, maxHeight - 5);
}

private void caputureScreen(int startX, int startY, int endX, int endY)
{
Rectangle r = null;

if (null == r)
{
r = new Rectangle(startX, startY, endX, endY);
}
this.createScreenCapture(r);
}

private void fetchScreenColor(Color[][] color, int startX, int startY,
int endX, int endY) {

caputureScreen(startX, startY, endX, endY);

int x = startX;
int y = startY;

for (x = startX; x < endX; x++) {
for (y = startY; y < endY; y++) {
color[x][y] = this.getPixelColor(x, y);
}
}
}

private boolean same(Color[][] color1, Color[][] color2, int startX,
int startY, int endX, int endY) {
boolean isSame = true;

int k = startX;
int j = startY;

outter: for (k = startX; k < endX; k++) {
for (j = startY; j < endY; j++) {
if (!color1[k][j].equals(color2[k][j])) {
isSame = false;
break outter;
}
}
}

return isSame;
}

private void delay(long delay) {
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

public void start() {
setStatus(RUN);
new Thread(this).start();
}

public void run() {
int rgb = 0;

while (getStatus() == RUN) {
if (PixelRobot.getPixelRobot().test()) {
rgb++;

/** 20s * 15 = 60s */
if (rgb >= 15) {
setStatus(STOP);

XPShutDown.getInstance().shutdown();
}
} else {
rgb--;

if (rgb < 0) {
rgb = 0;
}

}

if (rgb >= 12)
{
MyFrame.LABEL.setText("关机倒计时: " + (300 - rgb * 20) + "s.");
}
else
{
MyFrame.LABEL.setText("关机检测中...");
}

}
}

public void setStatus(int status) {
this.status = status;
}

public int getStatus() {
return status;
}

}




[color=white]注意: 此程序若不能关闭...请联系作者![/color]

http://www.ppmy.cn/news/572559.html

相关文章

html5播放器绿屏修复,迅雷看看绿屏播放视频怎么修复

迅雷看看绿屏播放视频怎么修复&#xff1f;一些用户发现在迅雷看看播放器中不管播放什么格式的视频都会出现绿屏的问题&#xff0c;出现这种情况的大多都是ATI显卡的原因&#xff0c;现在就着手解决这件麻烦事吧。 迅雷看看绿屏播放视频怎么修复&#xff1f; 一、关闭硬件加速&…

html+播放ftp,迅雷看看播放器3.1 直接播放Http/Ftp的影音文件

详细介绍 迅雷看看播放器3.1版本亮点&#xff1a;(new) 支持全网点播&#xff1a; 直接播放Http/Ftp的影音文件&#xff0c;越热门的影片播放越流畅。 直接播放支持BT种子。 支持RM/RMVB/WMV/WMA/ASF/AVI/MP3/MP4/MPEG/MKV/MOV/TS等格式的在线播放。 可以在较大程度上防止死链。…

Servlet 相关内容

1. Servlet 1.1 Servlet概述 Servlet 是 SUN 公司提供的一套规范&#xff0c;名称就叫 Servlet 规范&#xff0c;它也是 JavaEE 规范之一&#xff0c;可以通过API来学习。目前在Oracle官网中的最新版本是JavaEE8&#xff0c;该网址中介绍了JavaEE8的一些新特性。当然&#xff…

前端开发——常用案例分享

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

再见,深圳~长沙,我又来啦

轻轻地&#xff0c;我走了&#xff0c;正如我轻轻地来&#xff0c;我挥一挥汗水&#xff0c;不带走一行代码....刚好八年整&#xff0c;没有多一天也没有少一天.... 犹记得2013年4.1日的时候&#xff0c;带着女友坐着绿皮硬卧从长沙来到了深圳&#xff0c;大学室友熊平去接的我…

模仿360安全卫士项目笔记3

27_手机防盗的原理_30 手机防盗的前提就是绑定sim&#xff0c;如果不绑定没意义&#xff1b; 1、在Setup2Activity页面时&#xff0c;当点击下一个按钮是校验是否设置了sim绑定&#xff0c;没绑定的话不让进入&#xff1b; 2、在SelectContactAcitivity得到手机里的联系人并选…

传美云商系统开发源码

以前的许知远是经书评写作者&#xff0c;是一个作家&#xff0c;也是一家书店的老板。与其说是马东们造就了他的爆红&#xff0c;不如说是他因为做《十三邀》而不得不拥抱互联网&#xff0c;进而被互联网所改变。而互联网所改变的&#xff0c;远不止2017年的许知远&#xff0c;…

笔记本--摄像头驱动--找不到相机--浏览器打开相机失败--未检测到摄像头--剩下的标题我就不想了--太长了

我是个憨批&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 摄像头的驱动是不用下载安装的&#xff0c;自动的为什么检测不到呢肯定是你某次不小心按错了&#xff0c;关掉了 快捷键 …