Verwendung von pywinauto mit laufendem Prozess

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
Seoman
User
Beiträge: 6
Registriert: Freitag 25. April 2008, 13:52

Dienstag 13. Mai 2008, 16:00

Hallo.

Ich werde leider nicht schlau aus pywinauto. Das Modul soll die Möglichkeit bieten, Befehle an ein laufendes Programm zu schicken.

Dazu muss ich erst eine Instanz des Programmes mit pywinauto starten, mit der ich dann arbeiten kann. Leider hapert es aber bereits genau daran. Was ist falsch am folgenden Code (am Beispiel von Thunderbird)?

Code: Alles auswählen

from pywinauto.application import Application

app = Application.connect_(path = 'C:\Programme\Mozilla Thunderbird\thunderbird.exe')

app.Posteingang.MenuSelect('Hilfe-->Versionshinweise')
Ich erhalte dabei die folgende Fehlermeldung:
app = Application.connect_(path = 'C:\Programme\Mozilla Thunderbird\thunderbird.exe')
TypeError: unbound method connect_() must be called with Application instance as first argument (got nothing instead)
Was funktioniert, ist die Variante mit 'Application.start'. Da das Programm aber schon läuft, kann ich damit nichts anfangen, sondern muss 'connect' wählen.
Ich habe dafür die Pfadangabe gewählt, mit der auch das entsprechende Programm gestartet wird.
Toll wäre übrigens eine Alternative, bei der man den Titel des Windows-Fensters statt des Pfades verwenden könnte. Kennt sich da jemand aus?


Gruß
Seoman
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mittwoch 14. Mai 2008, 08:02

Mit pywinauto kenne ich mich nicht aus. Schau Dir stattdessen aber mal watsup an: http://www.tizmoi.net/watsup/intro.html. Beispiel 3 kommt doch Deinen Wünschen schon recht nahe, oder?
MfG
HWK
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Mittwoch 14. Mai 2008, 11:43

Seoman hat geschrieben:

Code: Alles auswählen

from pywinauto.application import Application
app = Application.connect_(path = 'C:\Programme\Mozilla Thunderbird\thunderbird.exe')
app.Posteingang.MenuSelect('Hilfe-->Versionshinweise')
Hallo Seoman!

Wie man hier http://pywinauto.openqa.org/howto.html sehen kann, musst du zuerst die Applikation erstellen und kannst dann ``connect`` ausführen.

Code: Alles auswählen

app = Application()
app.connect_(path = r"c:\windows\system32\notepad.exe")
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Seoman
User
Beiträge: 6
Registriert: Freitag 25. April 2008, 13:52

Donnerstag 15. Mai 2008, 09:22

Danke, Gerold, das war es.

Allerdings kann ich auf Thunderbird immer noch nicht zugreifen. Er findet "Thunderbird" weder im Fenstertitel 'Posteingang von abc@def.de - Thunderbird' noch über den genannten Pfad, auch nicht mit Raw-String).

Aber mit dem Programm, das ich eigtl. aufrufen möchte, funktioniert's.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Donnerstag 15. Mai 2008, 10:36

Seoman hat geschrieben:Er findet "Thunderbird" weder im Fenstertitel 'Posteingang von abc@def.de - Thunderbird' noch über den genannten Pfad
Hallo Seoman!

Ja, Thunderbird ist (glaube ich) so ein Sonderfall, da es nicht direkt mit Windows-Widgets arbeitet, sondern sein eigenes GUI-System mitbringt. Das kann zu Problemen führen. Solche Sonderfälle gibt es immer. Da kann man nichts machen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten