【Python3】PC 열림 방지 소프트웨어를 만들어 보았다

최근 PC를 계속 보는 것이 많아져 시력이 나빠졌다고 느꼈다.
따라서 다음과 같은 PC 열림 방지 소프트웨어를 만들었다.

1. 목표



PC를 열고 1시간 이내에 잠자기.
또한 작업 시간을 GUI에 표시합니다.

2. 사양



언어: Python3.9
나중에 pyinstaller로 exe.
OS:Windows10

3.실장시 주의점



threading으로 슬립 처리와 작업 경과 시간 표시 처리를 나누는 것.

4. 구현 방법과 코드



sleeping.py
import ctypes
import datetime
import tkinter as tk
import time
from tkinter import messagebox
import threading
import sys
from tkinter import ttk

#初期設定
dt = datetime.datetime.now()
print("開始時間: "+str(dt.hour)+":"+str(dt.minute)+":"+str(dt.second))
funsu = 0
flag = True

#スリープ判定
def sleep_checker():
    #8時以前と22時以降の場合何もしない
    if dt.hour >= 22 or dt.hour <8:
        pass
    else:
        time.sleep(3600)
        ctypes.windll.PowrProf.SetSuspendState(0, 1, 0)
        sys.exit()

#経過時間表示
def show_window():

    #GUI設定
    root = tk.Tk()
    status = tk.StringVar()
    status.set("")
    root.title("実行監視プログラム")
    root.geometry("450x180")
    work_label=tk.Label(text="作業開始から",font=('',35),wraplength=400,anchor="center")
    work_label.pack()
    status_label=tk.Label(textvariable=status,font=('',45),wraplength=400,anchor="center")
    status_label.pack()


    # ---設定項目---
    def check_time():
        global funsu,flag
        dt_now = datetime.datetime.now()
        sabun = dt_now - dt

        #秒数計算
        if sabun.seconds == 1:
            flag = False
        if (sabun.seconds%60) == 0 and flag == False:
            funsu = funsu+1
        else:
            pass

        if funsu <1:
            status.set(str(sabun.seconds)+"秒経過")
        elif funsu == 59:
            status.set("残り1分で作業を終了してください")
        elif funsu == 60:
            root.destroy()
        else:
            status.set(str(funsu)+"分"+str(sabun.seconds%60)+"秒経過")

        #1秒ごと繰り返し
        root.after(1000,check_time)
    check_time()
    root.mainloop()

thread1 = threading.Thread(target=sleep_checker)
thread2 = threading.Thread(target=show_window)
thread1.start()
thread2.start()
thread1.join()
thread2.join()


아래에 동작시 스크린샷을 올린다


5. 고찰



sleep의 처리로 오지 않을까 생각했지만 의외로 빨리 할 수 ​​있었다.
슬립 후에 처리가 떨어지지 않는 경우가 있고, 슬립으로부터 복귀해도 재 슬립하는 것이 있었다.
대책으로서, Python의 프로그램을 강제 종료시키는 수단으로서, sys.exit()를 슬립시킨 후에 짜넣었다.

6. 참고 사이트



Windows를 슬립시키는 처리를 참고로 했습니다.

파이썬에서 스레드 처리에 대해 설명합니다. 참고로 했습니다.

.py 파일의 .exe화 방법에 대해서는 이 사이트를 참고로 했습니다.

좋은 웹페이지 즐겨찾기