Screensaver mit Maus

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ElFiniberto
User
Beiträge: 4
Registriert: Sonntag 7. Januar 2024, 19:12

Guten Tag,
ich habe die letzten tage an einem Programm gearbeitet, dass nach einer gewissen zeit in der ich meine Maus nicht bewege und keine Keyboardinputs kommen zu einen zweiten Desktop wechselt und dort dann meine maus als dieses DVD-Dingens funktioniert und an den ecken abbouced. Wenn ich meine maus dann wieder bewege, wechsle ich wider auf Desktop 1 zurück. Ich wollte aber im generellen Fragen, ob ihr verbesserungsvorschläge habt und ich wollte nachfragen, ob man meine maus smoother machen kann und ob ich anstatt meiner maus ein gif verwenden kann.
Danke im voraus:)

Hier ist der Code:
import pyautogui as pag
import random
import time
import keyboard

dvdX = 144
dvdY = 128
speedX = 5
speedY = 5

key_presses = 0
hauptdesktop = 0

screen_width = 1920
screen_height = 1080


keys_to_check = ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'add', 'alt', 'apps', 'backspace', 'capslock', 'clear', 'ctrl', 'del', 'delete',
'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'help', 'home', 'insert', 'left', 'pagedown', 'pageup', 'pause', 'print', 'return', 'right',
'shift', 'space', 'tab', 'up', 'command', 'option']


curr_coords = pag.position()
afk_counter = 0
while True:
for key in keys_to_check:
if keyboard.is_pressed(key):
afk_counter = 0
if pag.position() == curr_coords:
afk_counter += 1
else:
if hauptdesktop == 0:
pag.keyDown('win')
pag.keyDown('ctrl')
pag.press('left')
pag.keyUp('win')
pag.keyUp('ctrl')
hauptdesktop = 1
afk_counter = 0
curr_coords = pag.position()
key_presses = 0
if afk_counter > 5000:
if key_presses == 0:
pag.keyDown('win')
pag.keyDown('ctrl')
pag.press('right')
pag.keyUp('win')
pag.keyUp('ctrl')
key_presses = 1
hauptdesktop = 0
dvdX += speedX
dvdY += speedY
pag.dragTo(dvdX, dvdY, duration=0.1, button='left')
curr_coords = pag.position()
if (dvdX >= (screen_width - 16)) or (dvdX < 16):
speedX = -speedX
if (dvdY >= (screen_height - 16)) or (dvdY < 16):
speedY = -speedY
print(f'AFK Counter: {afk_counter}')
Sirius3
User
Beiträge: 17791
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze keine kryptischen Abkürzungen. Was ist ein pag? Oder ein afk? Das macht das Lesen des Codes sehr schwierig.

Der busy-Loop ist schlecht, und das Abfragen der ganzen Keys würde man besser durch Abfragen von Key-Events lösen.

Es gibt True und False, das sollte man benutzen, nicht 1 und 0.

Das ganze könnte dann ungefähr so aussehen:

Code: Alles auswählen

import pyautogui
import random
import time
import keyboard
from threading import Event

at_main_desktop = False
current_position = None
idle_counter = 0
key_event = Event()
keyboard.hook(lambda ev: key_event.set())

while True:
    if key_event.wait(0.1) or pyautogui.position() == current_position:
        idle_counter = 0
        current_position = pyautogui.position()
        key_event.clear()
        if at_main_desktop:
            pyautogui.hotkey('win', 'ctrl', 'left')
            at_main_desktop = False
    else:
        idle_count += 1
        if idle_count > 500:
            if not at_main_desktop:
                pyautogui.hotkey('win', 'ctrl', 'right')
                at_main_desktop = True
                key_event.clear()
            # move mouse
            ...[/python]
Antworten