Andere Programme steuern

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
grany
User
Beiträge: 6
Registriert: Montag 6. November 2006, 18:32

Dienstag 27. März 2007, 10:40

Hallo miteinander,

ich versuche ein anderes Programm (Google Earth) mittels Python zu manipulieren, dafür gibt's ja auch eine COM API mit ein paar vordefinierten Funktionen.
Leider krieg ich nicht raus, wie man generelle Einstellungen, die es in jedem Programm gibt, mittels Python beeinflussen kann, nämlich:

1. Grösse des Fensters (Google Earth) festlegen.
2. Eine Tastenkombination (Shortcut) an das Programm übergeben, damit gewisse Menüleisten aus-/eingeblendet werden.
3. Ein gewisses Fenster immer im Vordergrund halten.

Ist dies überhaupt machbar mit Python?

Freue mich über eine Antwort, vielen Dank!
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Dienstag 27. März 2007, 10:52

Solltest Du unter Windows mit dieser Bibliothek hinbekommen: PyWin32

Ob wirklich alles damit genau möglich ist müsste man wohl letztendlich doch am lebenden Programm ausprobieren.
grany
User
Beiträge: 6
Registriert: Montag 6. November 2006, 18:32

Dienstag 27. März 2007, 22:28

Dankeschön.
Ich bin auf die Funktion Sendkeys() gestossen, die mir ziemlich interessant erscheint:

Code: Alles auswählen

import win32com.client
import sendkeys
googleEarth =  win32com.client.Dispatch("GoogleEarth.ApplicationGE")
googleEarth.SendKeys("{ENTER}")
Fehlermeldung:

Code: Alles auswählen

line 496, in __getattr__
    raise AttributeError, "%s.%s" % (self._username_, attr)
AttributeError: GoogleEarth.ApplicationGE.SendKeys
Dies führt jedoch zu diesers Fehlermeldung. Kann es sein, dass diese Funktion aufgrund der GoogleEarth API nicht zugelassen ist, also nicht bei jedem Programm funktioniert?

Bei anderen Programmen klappt es nämlich mit analogem Code perfekt.

Edit (Leonidas): BBCodes aktiviert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 28. März 2007, 11:24

grany hat geschrieben:Dies führt jedoch zu diesers Fehlermeldung. Kann es sein, dass diese Funktion aufgrund der GoogleEarth API nicht zugelassen ist, also nicht bei jedem Programm funktioniert?
Ich tippe eher darauf, dass Google Earth ein anderes Toolkit nutzt und daher nicht auf die Win32-Events reagiert. Was für ein Toolkit nutzt GE denn? Ich bin grade nicht an meinem Rechner und kann das im Moment leider nicht nachschauen.

Man kann das in der Regel recht einfach feststellen: man schaut in den Google Earth-Ordner und überlegt ob dort DLLs liegen, die auf z.B. Qt schließen lassen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Mittwoch 28. März 2007, 20:32

Leonidas hat geschrieben:Man kann das in der Regel recht einfach feststellen: man schaut in den Google Earth-Ordner und überlegt ob dort DLLs liegen, die auf z.B. Qt schließen lassen.
Das sollte doch eigentlich ziemlich egal sein. Die QT Programmierer sind ja auch nicht komplett unabhängig von System, sondern verlassen sich auf darunter liegende Graphik-Subsystem. Unter X kann man deswegen mit QT auch alle möglichen internen X11-Eigenschaften eines Fensters abfragen, ebenso wie man unter Windows über QT Zugriff auf das Handle des Fensters hat. Deswegen reagiert auch eine QT Anwendung auf sendkeys.

Für mich siehst das eher wie ein Programmierfehler aus: Mir ist nicht in Erinnerung, dass SendKeys eine COM-Funktion ist. Iirc ist das eine einfache Windows-API Funktion, die mit COM nichts am Hut hat.
Deswegen wundere ich mich, dass sie über das COM Objekt aufgerufen wird. Ich denke, der Fehler liegt eher darin, dass sendkeys über das falsche Objekt aufgerufen wird.
Antworten