`

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

阅读更多
迅雷看看播放完成后自动关机
-----------------------------------------
使用说明:
    本程序用于通过像素自动检测迅雷播放器播放时间,检测范围大致在全屏时或最大化时,总之窗口底部要在开始菜单上面不超过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;
	}

}
 



注意: 此程序若不能关闭...请联系作者!
分享到:
评论

相关推荐

    C#自动重启、定时关机、开机自动运行相关示例

    C#自动重启、定时关机、开机自动运行相关示例

    自动关机指令

    1. **下载完成后自动关机**:当用户晚上开启下载任务时,可以通过设置下载完成后的关机时间来自动关闭电脑,避免不必要的能耗。 2. **办公室定时提醒**:如上述脚本所示,可以在特定时间点设置提醒,例如下班前提醒...

    中断关机示例(消息截取)

    这时,我们可以在接收到`WM_QUERYENDSESSION`时检查当前是否有未完成的任务,如果有,就返回不允许关机的响应,从而阻止系统的默认关机操作。 当然,这样的操作需要谨慎处理,因为它可能会干扰到系统的正常功能,...

    自动关机命令

    根据给定文件的信息,我们可以提炼出关于“自动关机命令”的详细知识点。 ### 自动关机命令概述 在计算机管理中,“自动关机命令”是一种非常实用的功能,它允许用户通过命令行方式来安排计算机自动执行关机操作。...

    延时自动关机软件,含源代码

    这种灵活性使得软件能够适应各种用户的需要,无论他们是想在完成某个特定任务后立即关机,还是希望在一段时间后自动执行。 标签“关机 C++”提示我们,这个软件是用C++编程语言编写的,C++是一种通用且高效的编程...

    vb.net 自动关机 带语音提醒

    在VB.NET编程环境中,开发一个自动关机程序可以实现计算机定时自动注销、重启或关机的功能,同时结合语音提醒,可以提高用户体验并确保用户在系统即将执行这些操作时得到及时通知。下面将详细介绍如何实现这一功能。...

    Windows XP自动关机

    例如,`/t 3600`表示一小时后自动关机。 4. **显示图形用户界面** - 命令格式:`shutdown /i` - 参数解释: - `/i`:打开一个图形用户界面,用于选择不同的关机选项。 5. **强制关机** - 命令格式:`...

    完成端口 IOCP 示例 DEMO

    它通过异步处理方式,将I/O请求提交给系统,然后在I/O操作完成后由系统通知应用程序,从而避免了传统同步I/O模式下的阻塞等待。在这个"完成端口 IOCP 示例 DEMO"中,我们将深入探讨如何创建和使用完成端口,以及如何...

    XP下自动关机代码不借助任何第三方软件

    - 这条命令表示在当前时间后的60秒,自动执行关机动作。`-t`参数后跟的数字定义了延迟时间,单位为秒。 3. `shutdown -a //取消关机` - 当你想要取消已经计划的自动关机时,可以使用这条命令。`-a`参数代表...

    自动关机代码包_JAVA自动关系包_

    在Java编程中,实现自动关机功能主要涉及操作系统级别的交互,这通常通过JNI(Java Native Interface)或者使用操作系统提供的API来完成。在Windows系统中,我们可以调用`shutdown.exe`命令行工具来实现这一目标。...

    windows自动关机

    2. **使用上述命令**:复制完成后,即可使用与Windows XP相同的方法和命令来实现自动关机。 通过上述方法,无论是Windows XP还是Windows 2000用户,都可以轻松地设置自动关机,从而节省电力,提高计算机的安全性和...

    简单实用的定时关机小程序和代码

    在IT领域,定时关机程序是一种非常实用的工具,它允许用户设置一个特定的时间,让计算机在该时间自动关闭,从而节省电力或者在无人值守时完成特定任务后自动关闭电脑。这种程序通常由编程语言编写,例如Python、C++...

    QTP自带Flight示例程序登录模块完整自动化测试

    "QTP自动化测试工具登录模块自动化测试" 本文将详细介绍使用QTP自动化测试工具...通过本示例,我们可以看到QTP自动化测试工具的强大功能和灵活性,它能够帮助我们快速地进行自动化测试,从而提高测试效率和测试质量。

    android播放m3u8示例

    本示例将探讨如何在Android Studio项目中实现M3U8视频的播放。 首先,我们需要了解`VideoView`组件,它是Android SDK中内置的一个视图类,可以用来播放视频。`VideoView`可以直接嵌入到布局中,并且提供了简单的...

    基于SAHI模块完成超分辨率以及小目标检测应用示例python源码+文档说明

    基于SAHI模块完成超分辨率以及小目标检测应用示例python源码+文档说明基于SAHI模块完成超分辨率以及小目标检测应用示例python源码+文档说明基于SAHI模块完成超分辨率以及小目标检测应用示例python源码+文档说明基于...

    vs2008 c#代码自动完成 示例文件

    发现dot net的代码自动完成功能很强大,自己写了两个,发上来 下载后,放在vs安装盘\Program Files\Microsoft Visual Studio 9.0\VC#\Snippets\2052\Visual C#\ 里面 象征性的要点分数,回头更新

    (美化版) 定时关机 网络自动校时软件 V2.5 正式版+隐藏版(支持开机自动校时 后台校时)

    程序运行后,执行定时关机(单击【确定】按钮或设置了【自动执行当前任务】、【自动校时】中的任何一项,程序主界面会自动隐藏)。 显示主界面的方法有两种: i. 【时钟提醒】界面显示时,单击【启】即可启动程序主...

    利用maven的MyBatis Generator 插件自动创建代码示例

    利用maven的MyBatis Generator 插件自动创建代码示例利用maven的MyBatis Generator 插件自动创建代码示例利用maven的MyBatis Generator 插件自动创建代码示例

Global site tag (gtag.js) - Google Analytics