2017-10-23 1 views
0

Ich erstelle eine Schleife, die Felder oft öffnen und schließen muss. Außerdem muss dies schnell erledigt werden. Ich habe pywinauto dafür verwendet, aber es scheint nicht konsistent genug zu funktionieren.Schließen einer Anwendung (schnell)

import pywinauto 
from time import sleep 
import ctypes 
import os 

os.startfile(file_path) 

# a bunch of keyboard events, which opens a seccond window 

ctypes.windll.user32.keybd_event(0x12, 0, 0, 0) #Alt 
ctypes.windll.user32.keybd_event(0x73, 0, 0, 0) #F4 
ctypes.windll.user32.keybd_event(0x73, 0, 0x0002, 0) #F4 
ctypes.windll.user32.keybd_event(0x12, 0, 0x0002, 0) #Alt 
sleep(0.2) 

Jetzt ist mein zweites Fenster geschlossen, ich muss noch das erste Fenster schließen. Ich kann dies nicht mit Tastaturanschlägen tun, da das Fenster nicht ausgewählt ist. momentan benutze ich das um das Fenster zu schließen:

app = pywinauto.application.Application(backend="uia") 
app.connect(path="myapplication.exe") 
app.kill() 

Diese Methode funktioniert oft. Wenn ich den Code jedoch häufig wiederhole, kann das Suchen und Verbinden des Fensters manchmal fehlschlagen. Ich bin auf der Suche nach einer zuverlässigen Methode, um die Datei zu schließen, und ich möchte auch, dass es schnell ist.

+0

Welche pywinauto-Version verwenden Sie? Und können Sie die Rückverfolgung eines typischen Fehlers liefern? –

+0

Auch warum nicht 'von pywinauto.keyboard importieren SendKeys; SendKeys ('^ {F4}') 'und' app.FirstWindowName.set_focus() ' –

+0

Ich kann nicht überprüfen, welche Version ich habe. – Gyula

Antwort

1

Diese Lösung scheint mir gut zu passen.

os.system("TASKKILL /F /IM Myapplication.exe") 
Verwandte Themen