【Python3】PC 열림 방지 소프트웨어를 만들어 보았다
11393 단어 ThreadingWMIsubprocessPython3
따라서 다음과 같은 PC 열림 방지 소프트웨어를 만들었다.
1. 목표
PC를 열고 1시간 이내에 잠자기.
또한 작업 시간을 GUI에 표시합니다.
2. 사양
언어: Python3.9
나중에 pyinstaller로 exe.
OS:Windows10
3.실장시 주의점
threading으로 슬립 처리와 작업 경과 시간 표시 처리를 나누는 것.
4. 구현 방법과 코드
sleeping.pyimport 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화 방법에 대해서는 이 사이트를 참고로 했습니다.
Reference
이 문제에 관하여(【Python3】PC 열림 방지 소프트웨어를 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ojitani3/items/87c131ddc079fcc5f897
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
언어: Python3.9
나중에 pyinstaller로 exe.
OS:Windows10
3.실장시 주의점
threading으로 슬립 처리와 작업 경과 시간 표시 처리를 나누는 것.
4. 구현 방법과 코드
sleeping.pyimport 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화 방법에 대해서는 이 사이트를 참고로 했습니다.
Reference
이 문제에 관하여(【Python3】PC 열림 방지 소프트웨어를 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ojitani3/items/87c131ddc079fcc5f897
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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화 방법에 대해서는 이 사이트를 참고로 했습니다.
Reference
이 문제에 관하여(【Python3】PC 열림 방지 소프트웨어를 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ojitani3/items/87c131ddc079fcc5f897
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Windows를 슬립시키는 처리를 참고로 했습니다.
파이썬에서 스레드 처리에 대해 설명합니다. 참고로 했습니다.
.py 파일의 .exe화 방법에 대해서는 이 사이트를 참고로 했습니다.
Reference
이 문제에 관하여(【Python3】PC 열림 방지 소프트웨어를 만들어 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ojitani3/items/87c131ddc079fcc5f897텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)