添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Java恶搞!强制关闭电脑上的程序进程!

原文链接: Java恶搞!强制关闭电脑上的程序进程! - 风华绝代的二狗子 - 博客园

效果

最近写代码经常和各种进程打交道,发现了一个很有意思的黑科技。
我直接说有什么用吧,可以设置每隔多少时间检查某个程序是否在使用,如果在用,就强制关闭。比如,有的sb舍友晚上就是不睡觉,一边打游戏一边嚷嚷,那么把程序放他电脑里,定时五分钟,他会发现他的撸啊撸每次都是只能玩五分钟就强退。


之前说的用robot废掉键盘和鼠标太小儿科,配合这个使用,保证让舍友怀疑人生。
最重要的是,用vb和bat代码量贼少而且非常方便,还能设置开机自动执行!



这里设置了检查记事本文件,时间间隔为五秒,效果就是运行程序后,记事本文件闪退,一直打不开

源码

不难,就是使用Java执行Windows命令而已,我们实现的过程其实就是在模拟在cmd小黑窗口里输入命令。

public static void main(String[] args) throws AWTException {
		shutdownPro("QQ", 5000);//传入两个参数,一个是想要操作的进程的名字,一个是时间间隔
	public static void shutdownPro(String progressName,int time) throws AWTException {
		int isRunning = -1;//定义变量,该变量用来判断某程序是否在运行,初始值为-1
		Robot robot=new Robot();
		while(true) {
			try {
				robot.delay(time);//使用robot的延时功能来完成每隔多少时间运行一次,当然还有其他方法实现该功能
				//下面两句是用Java来调用某个程序的语句,这里定义了一个Windows的命令,然后去执行。该语句的作用是查看当前在运行的程序
				String cmd = " tasklist";
				Process p = Runtime.getRuntime().exec(cmd);
				//上述语句执行完后,可以通过Process对象获得窗口返回的数据,把这个数据拼接成一个字符串
				StringBuffer proList = new StringBuffer();
				byte[] b = new byte[1024];
				for (int n; (n = p.getInputStream().read(b)) != -1;) {
					proList.append(new String(b, 0, n));
				isRunning = proList.toString().indexOf(progressName+".exe");//调用indexOf方法判断某个进程是否存在于我们得到的结果中
				//如果有,说明在运行
				if (isRunning >= 0) {
					System.out.println("正在关闭");
					//同上,执行一条命令,该命令是强制关闭该进程
					String command = "taskkill /f /im "+progressName+".exe";
					Runtime.getRuntime().exec(command);
					System.out.println("已关闭");
				} else {
					System.out.println("无进程");
			} catch (Exception e1) {
				e1.printStackTrace();
	}

讲解

  1. cmd命令:其实就是Windows命令,感兴趣的自己去查一下。
    这里我们用到了两个,一个是tasklist,该命令是列出当前在运行的程序,就是打开任务管理器,看到的当前进程列表


在cmd里运行的效果是


第二条命令:taskkill /f /im xxx.exe
taskkill是Windows命令行里终止指定程序进程的命令。
/f 表示强制终止
/im 表示指定的进程名称
xxx,就写程序名字呗,相关记事本就是notepad,想关QQ那就是QQ呗,当然最重要的是关了他们的LOL

  1. 设置多久执行一次
    显然死循环啊,里面用Robot的延时方法或者线程sleep方法都行。
    不嫌麻烦用时间日期类来做也行
  2. 如何判断某程序是否在运行
    执行第一条指令,会得到返回结果,我们把它当成一个字符串来看,这个字符串里包含了所有当前在运行的程序。那用string的indexof方法或者contains方法都行啊,判断这个字符串是否包含某个子字符串,这个子字符串就是我们指定的程序名
    如果存在,那么执行第二条指令,强行关闭

扩展

上面是学习一下Java,下面才是干货

do
set bag=getobject("winmgmts:\\.\root\cimv2")