From 7c2ac6abfa839ae12b2d252d7f6a9d2cf33428c9 Mon Sep 17 00:00:00 2001 From: YandolsZX Date: Mon, 20 Mar 2023 19:01:17 +0800 Subject: [PATCH] Initial version --- chatterino_process_monitor.py | 56 ++++++++++++++++++++++++++++++++++ icon.png | Bin 0 -> 16657 bytes 2 files changed, 56 insertions(+) create mode 100644 chatterino_process_monitor.py create mode 100644 icon.png diff --git a/chatterino_process_monitor.py b/chatterino_process_monitor.py new file mode 100644 index 0000000..9f4db49 --- /dev/null +++ b/chatterino_process_monitor.py @@ -0,0 +1,56 @@ +import psutil +import time +import os +import subprocess +import pystray +from PIL import Image + +# Function to check if Chatterino is running +def is_chatterino_running(): + for proc in psutil.process_iter(): + try: + if "chatterino.exe" in proc.name(): + return True + except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): + pass + return False + +# Function to run Chatterino +def run_program(program_path): + os.startfile(program_path) + # todo: switch over to subprocess + # process = subprocess.Popen(program_path, cwd = program_path) + +# Function to display system tray icon +def on_quit_callback(icon): + icon.stop() + +# Define system tray icon and menu +def create_tray_icon(): + icon_image = Image.open("icon.png") + menu = pystray.Menu( + pystray.MenuItem( + "Quit", on_quit_callback, default=True + ) + ) + return pystray.Icon("Chatterino Monitor", icon_image, "Chatterino Monitor", menu) + +if __name__ == '__main__': + print("Yandols' Chatterino Process Monitor Script") + + # Set path to Chatterino + program_path = "C:\\Program Files\\Chatterino7\\chatterino.exe" + + # Create system tray icon + icon = create_tray_icon() + + # Loop to check if Chatterino is running every 10 minutes + while True: + if is_chatterino_running(): + print("Chatterino is running. Rechecking in 10 minutes.") + else: + print("Chatterino is not running. Starting in 30 seconds...") + time.sleep(30) + run_program(program_path) + time.sleep(1) # wait for system tray icon to initialize + time.sleep(600) # wait 10 minutes diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b51d5ae60ef30f8f14d78200a61a21488023ab5d GIT binary patch literal 16657 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