一键结束进程 #
起因 #
我真的绷不住了,Alt+F4
不能够关闭程序,调个任务栏管理器半天不出来,出来了还无响应,我真的服了,只能强制重启。所以我打做个一键杀死进程的程序。
编写 #
思路 #
- 需要获取当前正在运行的程序
- 获取当前窗口句柄需要使用到系统函数,通过窗口得到进程pid,所以必须使用
win32
库
- 需要能够调用
taskkill
指令
- Python中内置的
os.system()
代码就能够很好的执行,但是需要提升至管理员身份
- 加上按键监听
- 这个部分在我之前的博客
超级粘贴也有使用到,就是
pynput
库
代码 #
import win32gui
import win32process
import psutil
import os
from pynput.keyboard import Listener,Key
import ctypes
# 排除列表
whitelist=["explorer.exe"]
#判断是否有管理员权限
def is_admin():
try:
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
#监听
def on_release(key):
if key == Key.esc: # 停止监听
return False
if key == Key.f2: # 这里是按f2调用kill函数
kill()
#杀死进程
def kill():
# 方案1 指哪打哪
# point =win32gui.GetCursorPos()
# now_point=win32gui.WindowFromPoint(point)
# now_process = win32process.GetWindowThreadProcessId(now_point)[1]
#方案2 获取当前激活的窗口
now_win = win32gui.GetForegroundWindow()
now_process = win32process.GetWindowThreadProcessId(now_win)[1]
tprocess=psutil.Process(pid=now_process)
if whitelist.count(tprocess.name())==0: ##判断是否白名单进程
target = r'taskkill /pid {} /F /T'.format(now_process)
os.system(target)
#开始判断管理员权限
if is_admin() == False:
print("警告:当前非管理员身份运行,可能导致kill失败")
#开始监听
with Listener(
on_release=on_release) as listener:
listener.join()
我也会把exe文件发布在GitHub上
https://github.com/ohdmire/OnePressKill/releases/
Ohdmire/OnePressKill
能够一键结束进程
HTML
0
0
小趣事 #
我真tmsb,把文件名称命名为taskkill,结果执行os.system
的时候就又调用了一遍该程序,结果我看半天以为是pyinstaller
编译出错了,我真的是服了。
该问题已在v0.2得到修复
更新日志 #
- v0.2修复了编译后致命bug
- v0.3增加了白名单功能,默认
explorer.exe
为白名单程序。同时增加了psutil
库获取进程名称 - v0.4增加了指哪打哪的选择
使用教程 #
只要运行程序按下F2
就能杀死当前窗口的程序,按ESC
退出程序
你可能还需要以管理员身份运行该程序
如果你需要也可以自行更改按键,具体参考官方文档 https://pynput.readthedocs.io/en/latest/keyboard.html
最后 #
效果