Генератор паролей с буфером обмена и оповещениями WIN
Начнём как обычно с импорта зависимостей. Т.К. эта статья для винды то и импортить мы будем либу для оповещений под винду.
import random from win10toast import ToastNotifier import pyperclip from datetime import datetime import keyboard
Установка:
pip install keyboard pip install win10toast pip install pyperclip
После установки всего необходимого мы создадим функцию генерации паролей:
def random4ik(): pas = random.choice(list("1234567890abcdfghigklmnopqrstuvyxwzABCDFGHIGKMNOPQRSTUVYXWZ")) for x in range(36): pas = pas + random.choice(list("!@#$%^&*()_+-1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ1234567890!@#$%^&*()_+-")) return pas
Итак, random.choice выберет первый символ нашего пароля, затем он передаст его дальше в цикл, в цикле мы будет складывать буквы по одной. то есть - каждый проход цикла будет добавлять один случайный символ к нашей строке. Символы вы можете заменить на свои, вставить символы которых нет на клавиатуре для более сложного пароля. По итогу функция нам возвращает рандомную строку размером - 36 символов.
Затем идёт функция которая записывает пароль в файл, добавляет в буфер обмена и выдаёт оповещение.
def pass_gen(): f = open("pass_log.txt", "a") random_pass = random4ik() print(random_pass) pyperclip.copy(random_pass) toaster = ToastNotifier() toaster.show_toast("Пароль скопирован в буфер обмена", str(random_pass), icon_path="1.ico", duration=2) f.write(f"======== {str(datetime.now(tz=None))[:-7]} ========\n\n{random_pass}\n\n") return random_pass
Тут всё довольно таки просто. Сначала мы открываем файл на дозапись, чему соответствует атрибут "а", затем записываем нашу функцию рандома в переменную. Далее вы выводим наш рандомный пароль в консоль, далее с помощью pyperclip.copy мы заносим его в буфер обмена, затем создаем нотификатор (оповещение) что пароль был скопирован в буфер обмена и сам пароль. Так же - вы можете добавить свою иконку и длительность оповещения. Затем мы записываем это всё в файл и возвращаем рандомный пароль, это нам будет нужно для другой функции.
Выглядит нотификация вот так:
Иконку вы можете добавить свою. Как видите - принимает либа .ico файлы. Далее будет функция которую по сути можно было бы и не делать. Она будет вставлять за нас наш текст из буфера обмена.
def paste_pass(text): keyboard.write(text)
Она принимает в себя аргумент text, далее с помощью библиотеки keyboard она его печатает на клавиатуре.
Ну и самая главная функция:
if __name__ == '__main__': print("STARTED") keyboard.add_hotkey('Ctrl + 1', pass_gen) keyboard.add_hotkey('Ctrl + 2', lambda : paste_pass(pass_gen())) keyboard.wait('Ctrl + Q')
Хотеки вы можете выставить свои, думаю тут не надо много объяснять, сначала выводим что программа запустилась, затем ждём сочетания клавишь, при нажатии на ctrl + Q программа закроется. Вы можете поменять хоткеи. При нажатии на ctrl + 1 будет сгенерирован пароль. При сочетании ctrl + 2 будет вызвана лямбда функция которая вставит наш пароль на место курсора.
Чутка больше про Лямба функции:
Чуть не забыл, сам файл pass_log.txt:
Ну и полный листинг программы:
import random from win10toast import ToastNotifier import pyperclip from datetime import datetime import keyboard def random4ik(): pas = random.choice(list("1234567890abcdfghigklmnopqrstuvyxwzABCDFGHIGKMNOPQRSTUVYXWZ")) for x in range(36): pas = pas + random.choice(list("!@#$%^&*()_+-1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ1234567890!@#$%^&*()_+-")) return pas def pass_gen(): f = open("pass_log.txt", "a") random_pass = random4ik() print(random_pass) pyperclip.copy(random_pass) toaster = ToastNotifier() toaster.show_toast("Пароль скопирован в буфер обмена", str(random_pass), icon_path="1.ico", duration=2) f.write(f"======== {str(datetime.now(tz=None))[:-7]} ========\n\n{random_pass}\n\n") return random_pass def paste_pass(text): keyboard.write(text) if __name__ == '__main__': print("STARTED") keyboard.add_hotkey('Ctrl + 1', pass_gen) keyboard.add_hotkey('Ctrl + 2', lambda : paste_pass(pass_gen())) keyboard.wait('Ctrl + Q')
Мой код не идеален, я пишу костыли, вы всегда можете написать лучше и модифицировать мой код