import time
import subprocess
import threading
from PIL import Image, ImageDraw
from pystray import Icon, Menu, MenuItem
# --- KONFIGURATION ---
TARGET_IP = "IP-Hier eintragen"
CHECK_INTERVAL = 10
running = True # Flag für den sauberen Stopp
def check_online(ip):
CREATE_NO_WINDOW = 0x08000000
res = subprocess.call(
['ping', '-n', '2', '-w', '2000', ip],
stdout=subprocess.DEVNULL,
stderr=subprocess.STDOUT,
creationflags=CREATE_NO_WINDOW
)
return res == 0
def create_image(color):
image = Image.new('RGBA', (64, 64), (0, 0, 0, 0))
dc = ImageDraw.Draw(image)
padding = 4
dc.ellipse([padding, padding, 64 - padding, 64 - padding], fill=color)
return image
def update_loop(icon):
global running
while running:
is_online = check_online(TARGET_IP)
if not running: break # Falls während des Pings beendet wurde
status_text = f"{TARGET_IP}: {'Online' if is_online else 'Offline'}"
new_color = "green" if is_online else "red"
icon.icon = create_image(new_color)
icon.title = status_text
# Schlafen in kleinen Häppchen, damit das Programm sofort reagiert
for _ in range(CHECK_INTERVAL):
if not running: break
time.sleep(1)
def on_quit(icon, item):
global running
running = False # Stoppt den Loop
icon.stop() # Schließt das Tray-Icon
# Setup
icon = Icon("NetworkChecker", create_image("gray"), title="Prüfe Status...")
icon.menu = Menu(MenuItem("Beenden", on_quit))
thread = threading.Thread(target=update_loop, args=(icon,), daemon=True)
thread.start()
icon.run()