# импортируем необходимые модули
import os
import time
import datetime
import win32api
import win32con
import pyautogui
import tkinter as tk
from tkinter import ttk
# устанавливаем некоторые константы, используемые в программе
FILENAME = "monitor_schedule.txt" # имя файла, в который сохраняется расписание
# получаем путь к рабочей папке
current_directory = os.getcwd()
# определяем функцию, которая сохраняет расписание в файл
def save_schedule(start_time, end_time):
with open(os.path.join(current_directory, FILENAME), "w") as f:
f.write(f"{start_time},{end_time}")
# определяем функцию, которая загружает расписание из файла
def load_schedule():
try:
with open(os.path.join(current_directory, FILENAME), "r") as f:
data = f.read()
start_time, end_time = data.strip().split(",")
return start_time, end_time
except FileNotFoundError:
return None, None
# функция winapi для включения
def turn_monitor_on():
pyautogui.press('esc')
#win32api.SendMessage(win32con.HWND_BROADCAST,win32con.WM_SYSCOMMAND, win32con.SC_MONITORPOWER, -1)
# функция использующая winapi для выключения
def turn_monitor_off():
win32api.SendMessage(win32con.HWND_BROADCAST,win32con.WM_SYSCOMMAND, win32con.SC_MONITORPOWER, 2)
def move_cursor():
x, y = (0,0)
win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, x, y)
# определяем функцию, которая проверяет расписание и включает/выключает монитор при необходимости
def check_schedule():
start_time, end_time = load_schedule()
if start_time and end_time:
now = time.strftime("%H:%M")
if now == start_time:
print ('monitor must on')
turn_monitor_on()
elif now == end_time:
print('monitor must of')
turn_monitor_off()
root.after(30000, check_schedule)
# Проверка на случайное пробуждение от мышки, выключает монитор через каждые 3 минуты
def check_schedule2():
start_time, end_time = load_schedule()
now = time.strftime("%H:%M")
print ('Shedule2 run')
print (start_time)
if now > start_time and now < end_time:
print ('monitor on')
else:
print ('monitor go off')
turn_monitor_off()
root.after(180000,check_schedule2)
# определяем функцию, которая сохраняет расписание, когда пользователь нажимает на кнопку "Save"
def save_button_click(start_entry, end_entry):
start_time = start_entry.get()
end_time = end_entry.get()
# проверяем, что введенные значения соответствуют формату времени HH:MM
try:
datetime.datetime.strptime(start_time, "%H:%M")
datetime.datetime.strptime(end_time, "%H:%M")
except ValueError:
status_label.config(text="Ошибка: время должно быть в формате HH:MM")
return
# приводим введенное время в нужный формат
start_time = datetime.datetime.strptime(start_time, "%H:%M").strftime("%H:%M")
end_time = datetime.datetime.strptime(end_time, "%H:%M").strftime("%H:%M")
save_schedule(start_time, end_time)
status_label.config(text="расписание сохранено")
# создаем главное окно программы
root = tk.Tk()
root.title("Включение/Выключение Монитора")
#root.geometry("500x150")
root.title.__sizeof__
# создаем интерфейс программы с помощью библиотеки Tkinter
start_label = tk.Label(root, text="Вкл монитора:(H:M)")
start_label.grid(row=0, column=0)
start_entry = tk.Entry(root,width = 5)
start_entry.grid(row=0, column=1)
end_label = tk.Label(root, text="Выкл монитора:(H:M)")
end_label.grid(row=1, column=0)
end_entry = tk.Entry(root,width = 5)
end_entry.grid(row=1, column=1)
save_button = tk.Button(root, text="Сохранить", command=lambda: save_button_click(start_entry, end_entry))
save_button.grid(row=2, column=1)
status_label = tk.Label(root, text="")
status_label.grid(row=3, column=0, columnspan=2)
# загружаем расписание из файла и заполняем поля ввода
start_time, end_time = load_schedule()
if start_time and end_time:
start_entry.insert(0, start_time)
end_entry.insert(0, end_time)
# Start the scheduler
check_schedule()
check_schedule2()
root.mainloop()