Время прочтения: 3 мин.

Основная логика приложения заключается в том, что мы отлавливаем процессы, которые открывают файлы.

  1. При первом запуске программы пользователю необходимо ввести пароль, который сохранится в текстовый файл. Он будет находится в папке с программой (в дальнейшем можно будет его сделать невидимым)
  1. Далее при открытии файлов, окно файла будет сворачиваться и выводится окно с вводом пароля
  1. Для ввода пароля есть всего 3 попытки, после неверного ввода свернутое окно файла закроется.

Для создания программы, использовались модули:

  1. tkinter — это графическая библиотека, позволяющая создавать программы с оконным интерфейсом.
  2. subprocess — этобиблиотека предназначенная для отслеживания процессов компьютера.
  3. os — этомодуль, предназначен для взаимодействия программы с операционной системой, в частности для создания файла с паролем в папке программы.
  4. ctypes — это библиотека внешних функций для Python. Позволяет вызывать функции в библиотеках DLL или совместно используемых библиотеках.
  5. psutil — является кросс-платформенной библиотекой для получения информации о запущенных процессах и использования системы (процессор, память, диски, сеть) в Python.
  6. понадобится функция sleep из модуля time
# Импорт всех необходимых модулей
import tkinter
import subprocess
import os
import ctypes
import psutil

from time import sleep

Итак, как выглядит сама реализация приложения.

С помощью функции subprocess.check_out(“tasklist”) мы обращаемся к командной строке и передаем в нее команду “tasklist”. Она нам помогает отследить все запущенные и запускаемые процессы на компьютере. Вывод производится в виде строки байтов, поэтому для перевода в нормальный вид воспользуемся функцией decode(‘cp1251’).

cmd = "tasklist"  # Команда для получения списка процессов
returned_output = subprocess.check_output(cmd)# Выполнение команды и возврат байтовой строки 
string = returned_output.decode('cp1251') 

После получения строки со всеми процессами, запущенными на данный момент, мы ищем необходимые нам имена. В этой версии блокируются файлы расширений: .txt, .doc. В Linux этот процесс можно было бы выполнить намного короче, так как там есть команды, позволяющие обнаружить работу с файлами за выбранное количество времени.

Затем, мы должны свернуть окно приложения Word/Notepad с помощью модуля ctypes.

#Обнаружение окна приложения
notepad_handle = ctypes.windll.user32.FindWindowW(u"Notepad", None)
ctypes.windll.user32.ShowWindow(notepad_handle, 6)#Для того что бы свернуть окно

Далее в строке процессов найти PID, идентификатор процесса, и с помощью модуля psutilблокируем его, чтобы нельзя было открыть окно.

#Поиск в строке списка процессов pid нужного нам процесса
index_string = returned_output.decode('cp1251').find('notepad.exe')
string_last_proc = returned_output[index_string:]
pid_str = string_last_proc.decode('cp1251').find('Console')
pid_str = int(string_last_proc[len(cmd) + 4:pid_str].decode('cp1251'))
# Блокировка процесса
self.proc = psutil.Process(pid_str)
self.proc.suspend()

В итоге, мы получили программу, которая позволяет нам сделать дополнительную защиту файлов.