Pyautogui / Überprüfung der Klicks

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Python_beginner
User
Beiträge: 2
Registriert: Montag 14. September 2020, 07:15

Hallo alle Zusammen,

Ich möchte mithilfe von Python ein bestimmtes Programm aufrufen und diese mithilfe von Pyautogui automatisieren. Die Tastensimulation funktioniert wunderbar, jedoch möchte ich zu Beginn überprüfen ob das Programm überhaupt gestartet ist und im Anschluss ob eine bestimmte Taste gedrückt wurde. Ich möchte dazu noch sagen, dass ich vor ca. 1,5 Wochen mit Python angefangen habe. :D
Es wäre sehr toll wenn mir jemand helfen könnte, da ich momentan nicht weiterkomme.


Als Beispielprogramm benutze ich hier in der Frage Beyond Compare

Code: Alles auswählen

import os, time, pyautogui, pygame

os.system('start "" "C:/Program Files/Beyond Compare 4/BCompare.exe""')

def checkProcessRunning(Beyond Compare):
    if checkProcessRunning(Beyond Compare):
        print('Process is running')
    else:
        print('No Process is running')

# Hier möchte ich überprüfen ob mein Programm gestartet ist, leider komme ich in keiner Weise zu einem sinnvollen Ergebnis


time.sleep(20)
pyautogui.press(['Alt' , '8'])
time.sleep(2)
pyautogui.press(['down', 'Enter'])
print(pyautogui.position())
pyautogui.click(x=963, y=519) 

time.sleep(5)
pyautogui.press('Enter')
time.sleep(3)
pyautogui.press(['Alt' , '9']) 
# Bei dieser Tastenkombination wird ein Downloadfenser geöffnet, hierbei wird eine Datei gedownloaded und in einem bestimmten Ordner abgespeichert. 
#Ich möchte hier entweder überprüfen ob der Download erfolgreich war oder ob die Tastenkombination erfolgreich durchgeführt wurde. 
#Für die Überprüfung des Downloades habe ich leider noch keine Ideen, jedoch für die Überprüfung der Tastenkombination, welche ich unterhalb eingefügt habe. 
#Leider auch ohne Erfolg.




while True: 
    try:
        if pyautogui.keyboard.is_pressed('9'): 
            print('9 was pressed')
            break
    except:
        break 



tasteaktiv = True
while tasteaktiv:
    for event in pygame.event.get():
        if event.type == pygame.NINE:
            Tasteaktiv = True
            print("9 Button ist angeklickt")   
            
            
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

os.system() sollte nicht benutzt werden. Benutze das subprocess Modul.

Der Parameter den die Funktion checkProcessRunning() entgegennimmt hat eine Leerstelle drin, das geht nicht. Die ganze Funktion ist allerdings sehr merkwürdig, da sie sich selber aufruft aber auch keinen Wert zurückgibt.

Varaiablen werden klein_mit_unterstrich geschreiben, ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase)

Was soll das try und except? Damit fängst du jeden Fehler ab, aber verlässt - wenn der Fehler auftritt - einfach nur die Schleife.
Benutzeravatar
__blackjack__
User
Beiträge: 13069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Python_beginner: Im ersten Versuch auf darauf zu warten das der Benutzer die Taste 9 drückt, verwendest Du `pyautogui.keyboard` — was es nicht gibt. Sich zu wünschen das ein Package ein bestimmtes Modul/Objekt oder eine Funktionalität hat reicht leider nicht. Mit `pyautogui` kann man nur Tastatur- und Mausereignisse senden, aber keine empfangen.

Das es `keyboard` nicht gibt, sollte die entsprechende `AttributeError`-Ausnahme ja auch sagen. Und die Dokumentation von `pyautogui`.

Und auch der zweite Versuch sollte zu einer Ausnahme führen. Nämlich dass das Videosystem nicht initialisiert ist wenn man versucht `pygame.event.get()` aufzurufen. Man braucht in Pygame ein Fenster um Maus und Tastaturereignisse zu empfangen. Und das auch nur wenn dieses Fenster den Fokus hat.

Du wirst Dir ein Package suchen müssen mit dem man Tastatur- und Mausereignisse nicht nur senden, sondern auch empfangen kann. `pyinput` könnte beispielsweise funktionieren.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Python_beginner
User
Beiträge: 2
Registriert: Montag 14. September 2020, 07:15

Vielen Dank für die Hilfe
Antworten