Seite 1 von 1

offene fenster unter XP?

Verfasst: Dienstag 24. Juli 2007, 22:21
von jo_hb
Hallo,
Gibt es eigentlich eine Möglichkeit rauszufinden welche Fenster grad auf dem desktop offen sind, unter win XP? (ich bräcuhte am besten eine Liste mit den titeln der fenster...)

Danke,
jo

Verfasst: Dienstag 24. Juli 2007, 23:44
von veers
Ist über ctypes/user32 möglich. Evtl finde ich morgen im Büro noch ein Stück Code welches das macht.

Verfasst: Mittwoch 25. Juli 2007, 08:53
von Leonidas
Schau mal in sleepplayer.py in die Klasse ``PlayerController``. Dort wird ``win32gui.EnumWindows`` verwendet um in ``_enum`` die hWnd und die PID eines bestimmten Fensters zu bekommen.

Verfasst: Mittwoch 25. Juli 2007, 09:48
von veers

Code: Alles auswählen

import ctypes
hwnd = None
while True:
		hwnd = ctypes.windll.user32.FindWindowExA(None, hwnd, None, None)
		if hwnd == 0:
				break
		else:
				val = u"\0" * 1024
				ctypes.windll.user32.GetWindowTextW(hwnd, val, len(val))
				val = val.replace(u"\000", u"")
				if val:
						print repr(val)
Habe es nimmer gefunden, aber schnell gebastelt. Ich frage mich gerade was schlimmer ist Win32 oder X11 :roll:

Verfasst: Mittwoch 25. Juli 2007, 09:53
von birkenfeld
Naja, C-APIs "direkt" über ctypes anzusprechen ist zwar schnell, kann aber halt nicht pythonisch sein.
Strings kannst du dort nun mal nicht anders zurückgeben.

Verfasst: Mittwoch 25. Juli 2007, 20:21
von jo_hb
Hm, nachdem es ctypes anscheinend nicht für py 2.5 gibt hab ich mir mal pythonwin angeguckt - aber ich finde einfach keine dokumentation dazu, hat da zufällig einer eine, oder einen Link??

Aber schonmal danke für die Tips! :)

Gruss,
Jo

Verfasst: Mittwoch 25. Juli 2007, 20:35
von BlackJack
`ctypes` ist bei Python 2.5 in der *Standardbibliothek*!

Eine weitere Frage....

Verfasst: Donnerstag 26. Juli 2007, 16:09
von Tython
Ich möchte, nachdem ich ein bestimmtes Fenster gefunden habe (eine Dialog Box), diese bearbeiten, d.h. ich würde gerne Einstellungen an diesem Dialog Feld vornehmen. Zum Beispiel eine Check-Box aktivieren, den Fokus auf einen anderen Button setzen um die Box mit diesem Button zu beenden. Also einen kleinen Dialog modifizieren und sofort wieder beenden, so dass der User möglichst wenig davon mitbekommt.

Schon mal danke im vorraus.... ;-)

Verfasst: Donnerstag 26. Juli 2007, 16:54
von Zap
Mh, liest sich ein bisschen wie eine Bestellung ;)

Aber auch hier nützt ctypes....

Code: Alles auswählen

In [8]: import ctypes

In [9]: ctypes.windll.user32.SetCursorPos(100, 100)
it's magic ;)

PS: Willkommen im Forum !

Verfasst: Donnerstag 26. Juli 2007, 17:16
von HWK

Verfasst: Freitag 27. Juli 2007, 10:58
von jo_hb
Oh, hehe, peinlich, in der Standardbibliothek...

Naja, danke für den Hinweis. Danke auch für die Bestellung von Tython, das wäre nämlich direkt auch meine nächste Frage gewesen... :)

Gruss,
Jo

Verfasst: Freitag 27. Juli 2007, 12:07
von veers
jo_hb hat geschrieben:Naja, danke für den Hinweis. Danke auch für die Bestellung von Tython, das wäre nämlich direkt auch meine nächste Frage gewesen... :)
Bestellung? Dann rück mal raus mit deiner Adresse für die Rechnung! :twisted:

Verfasst: Montag 30. Juli 2007, 21:23
von jo_hb
Also ich hab dieses böse Wort nur wegen...
Zap hat geschrieben:Mh, liest sich ein bisschen wie eine Bestellung :wink:
...benutzt. Würde nie auf die Idee kommen meine Fragen hier als Bestellung zu verstehen und danke dir nochmal für deine sehr hilfreichen tips! :)

Gruss,
Jo

Verfasst: Montag 30. Juli 2007, 21:55
von jo_hb
Ich glaube ich brauche nochmal Hilfe in dieser Sache: Die Liste, die ich mit dem Script von weiter oben bekomme ist ja endlos lang - wie finde ich denn raus, welche davon wirkliche 'Fenster' sind?

Das Fenster dass ich nämlich suche gibt es auf meinem Bildschirm nur einmal, in der Liste taucht der Name / text des Fensters aber 14 mal auf. Von dem auf meinem Schirm müsste ich dann wissen WO auf dem Bildschirm es sich befindet, und wie gross es ist. Hab mich jetzt schon eine ganze Weile damit beschäftigt aber ich kriegs nicht hin, veers, du scheinst da ja ziemlich fit zu sein, wär's machbar dass du dein Beispiel von unten um diese Funktionen erweiterst?

Verfasst: Montag 6. August 2007, 12:32
von Mad-Marty
jo_hb hat geschrieben:Ich glaube ich brauche nochmal Hilfe in dieser Sache: Die Liste, die ich mit dem Script von weiter oben bekomme ist ja endlos lang - wie finde ich denn raus, welche davon wirkliche 'Fenster' sind?

Das Fenster dass ich nämlich suche gibt es auf meinem Bildschirm nur einmal, in der Liste taucht der Name / text des Fensters aber 14 mal auf. Von dem auf meinem Schirm müsste ich dann wissen WO auf dem Bildschirm es sich befindet, und wie gross es ist. Hab mich jetzt schon eine ganze Weile damit beschäftigt aber ich kriegs nicht hin, veers, du scheinst da ja ziemlich fit zu sein, wär's machbar dass du dein Beispiel von unten um diese Funktionen erweiterst?
Das liegt einfach daran, das vieles was du siehst nicht nur *ein* fenster ist.
Viele Anwendungsfenster bestehen aus einer unmenge von subfenstern.

Auserdem würde ich für sowas eh pywinauto empfehlen.

Verfasst: Dienstag 28. August 2007, 21:07
von Tython
moin moin,

hab da mal noch ne Frage. Und zwar verwende ich zur Bearbeitung eines Dialoges Watsup und pywinauto, das klappt auch völlig reibungslos, jedoch ist es mit beiden Modulen nicht möglich, eine Check-Box zu setzen.

Also entweder ich hab da etwas übersehen oder das ist einfach hier nicht mit drin, hat da jemand nen schlauen Tipp für mich?

Danke

Verfasst: Mittwoch 29. August 2007, 09:25
von mkesper
Möglicherweise findet sich die Antwort hier: Suchergebnis in der Mailingliste.

Verfasst: Mittwoch 12. September 2007, 20:22
von Tython
Ok, thanx....
Funktioniert super :D