2011-01-08 6 views
3

Ich bin neu in Python und versuche, eine Kombination von Tastenanschlägen an eine Anwendung zu senden, die ich unter Windows 7 öffne. Während mein Skript fehlerfrei funktioniert, wenn ich Editor aufrufen. exe für Testzwecke, es nicht mit der eigentlichen Anwendung, die ich versuche zu verwenden.Wie simulierte Tastaturstriche mit SendKeys an das aktive Fenster gesendet werden

mein Code hier so weit:

import win32com.client 
import time 
import SendKeys 
import os 
from ctypes import * 

shell = win32com.client.Dispatch("WScript.Shell") 

os.startfile("C:\...exe") 

time.sleep(5) 

shell.SendKeys('%{F4}')  # 'Alt+F4' to close the application again. 

Aus irgendeinem Grund wird die Anwendung auf das Skript schließen in nicht-Reaktion. Wenn ich 'Alt + F4' auf meiner Tastatur drücke, wird es wie erwartet geschlossen. Irgendwelche Ideen, was hier vor sich geht?

Jede Hilfe ist willkommen! Bitte beachten Sie, dass ich bin neu in Python ;-)

PS: Ich habe bereits überprüft, dass die Anwendung im aktiven Fenster ausgeführt wird, indem diesen Code-Schnipsel:

import win32ui 
wnd = win32ui.GetForegroundWindow() 
print wnd.GetWindowText() 
+0

Welche sind Ihre spezifischen Anforderungen? Warum benutzt du Python? Es sieht so aus, als hättest du dich in eine Ecke gemalt. – Apalala

+0

Hallo, Apala - Danke, dass du dir die Zeit genommen hast zu antworten. Meine Anforderungen sind, dass ich die Interaktion mit diesem GUI-basierten Tool automatisieren möchte, da ich eine große Liste von Daten bereitstellen muss, die nur über das GUI-Formular der Anwendung eingegeben werden können. Ich benutze Python, weil es alle Fähigkeiten zu bieten scheint, die ich für diese Aufgabe benötige. Lassen Sie mich wissen, ob es mehr Informationen gibt, die Sie benötigen, um eine Hypothese über das, was schief läuft, zu erstellen. – pat

Antwort

0

OK ... I neu gestartet das System und aus irgendeinem Grund funktioniert es jetzt. Ich frage mich, ob eine Prozessinstanz aus früheren Programmaufrufen möglicherweise auf dem System verweilte. Wie auch immer, ich bin jetzt in der Lage, die Manipulationen wie erwartet durchzuführen, auch wenn ich nicht wirklich verstehe, was überhaupt schief gelaufen ist.

Vielen Dank an alle, die sich die Zeit genommen haben zu repsondieren.

0

Ich weiß, das vor 6 Jahren gefragt wurde, aber jemand könnte mit dem gleichen Problem sein, ist so hier eine mögliche Lösung:

shell.AppActivate('Put_The_Name_Here')

Der obige Code wählt das Programm, Datei, etc., die ist geöffnet, aber nicht aktiviert, das ist vielleicht dein Problem.

Hoffe das hilft jemandem!