Programm starten + Kontrolle über Fensterproperties

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
thewhale
User
Beiträge: 3
Registriert: Samstag 27. Juni 2009, 22:29

Hallo,

nach langer Zeit passivem Lesens ist das mein erster Beitrag hier im Forum und er ist auch gleich eine Frage:

Im Moment suche ich (verzweifelt) nach Informationen wie ich mit Python (Linux, Gnome)

- ein externes Programm starten kann (z.B. Evolution)
- danach die Kontrolle über die Anzeigeformen (versteckt/sichtbar) des Programmfensters dieses Programmes erhalten kann.

Wem das bekannt vorkommt: Alltray kann das schon, das Problem ist aber dass ich in einem Programm volle Kontrolle über ein Statusicon (wechselnd je nach Mail-ungelesen-Status) UND Anzeigestatus haben möchte.

Bei bisherigen Recherchen bin ich mittlerweile über Xlib und Xlib.protocol.event.ClientMessage gestolpert, kann aber absolut nichts finden wie man z.B. das externe Programm so starten kann dass man nachfolgend Zugriff auf die Properties hat.

Wäre über jede Hilfe (Denkanstoß, Link, geeignetere Suchbegriffe,...) dankbar.

Viele Grüsse und schönes WE
Zuletzt geändert von thewhale am Montag 29. Juni 2009, 16:28, insgesamt 1-mal geändert.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Hm,

du solltest dafür am besten die API des entsprechenden Programmes nutzen.

Ansonsten schlage ich dir ooxcb vor, damit kannst du Informationen über Fenster bekommen, sie verschieben und so weiter.

Gruß
thewhale
User
Beiträge: 3
Registriert: Samstag 27. Juni 2009, 22:29

Vielen Dank,
du solltest dafür am besten die API des entsprechenden Programmes nutzen.
Wie ist das gemeint? Am Fall "Evolution" (oder beliebigen GTK/Gnome-Programmen) - bisher dachte ich dass ich da direkt mit GTK arbeiten sollte?

ooxcb kannte ich nicht, werde ich mir mal ansehen, dankeschön :)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Naja wenn du so Zeug wie Minimierung ins Systray beeinflussen möchtest ist es sinnvoller die entsprechende API-Funktion zu verwenden... ganz einfach weil bei den meisten Programmen zB "Minimieren ins Systray" nicht nur aus "Minimieren ins Systray" besteht, sondern es wird zB das Verhalten des Programmes angepasst. Wenn das Programm aber davon nichts weiß,...
thewhale
User
Beiträge: 3
Registriert: Samstag 27. Juni 2009, 22:29

Richtung Xlib war scheinbar gar nicht so verkehrt: http://www.daa.com.au/pipermail/pygtk/2 ... 17186.html.
Ist aber scheinbar nicht so einfach mehr Informationen über die Anwendung in Python zu finden (Minimize/Maximize-Events)...werde weitersuchen :)
cywhale
User
Beiträge: 2
Registriert: Freitag 20. April 2007, 09:21

Für alle die ein ähnliches Problem haben könnten - bin ein Stück weiter gekommen, mit folgendem Codeschnipsel wird Gedit in die Taskleiste (noch NICHT Notification-Area) minimiert und nach Tastendruck wiederhergestellt (Anwendung: Gedit starten, dann Terminal starten, Script starten):

Code: Alles auswählen

# 
import pygtk
pygtk.require('2.0')
import gtk
import wnck

def main():
    pattern = "gedit"
    root = gtk.gdk.get_default_root_window()

    # Process pending gtk+ events so that wnck can find out about existing windows.
    while gtk.events_pending():
        gtk.main_iteration()

    xids = root.property_get("_NET_CLIENT_LIST")[2]
    for xid in xids:
        w=gtk.gdk.window_foreign_new(long(xid))
        if(not w):
            continue
        name=w.property_get('WM_NAME')[2].lower()

        print name
        
        if name.endswith(pattern):
            print "FOUND: " + name + " " + str(xid)
            try:
                w.iconify()
                raw_input("Press Enter to terminate")
                w.deiconify()
            except:
                print "ERROR"

if __name__ == '__main__':
    main()
Jetzt muss ich noch rausfinden wie man das Erscheinen in der Taskleiste abstellt und warum das Ganze nur funktioniert wenn das Terminal+Script erst NACH Gedit gestartet werden...
Zuletzt geändert von cywhale am Mittwoch 28. Oktober 2009, 20:57, insgesamt 1-mal geändert.
cywhale
User
Beiträge: 2
Registriert: Freitag 20. April 2007, 09:21

Schade, muss mich korrigieren - funktioniert unter Metacity prächtig, unter Compiz nur ab und zu nach Lust und Laune - dachte ich hätte den Fehler - falsch gedacht :(
Antworten