Kann man eigentlich auch den Focus auf eine Eingabekomponente eines Programms setzen, so dass man direkt tippen k├Ânnte?
Eigentlich sind das doch auch blos Fenster...
Notice: This forum has been recovered from an old backup, so some content, links, and dates may be outdated. The forum is currently read-only while we restore sign-in and registration functionality. Details
If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.
If you find this forum valuable and would like to help keep it online, donations to help cover hosting and domain costs are greatly appreciated, but never expected. You can support the forum through Buy Me a Coffee or Ko-fi. Thank you for helping preserve the EventGhost community.
Focus auf Eingabekomponente setzen?
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
versucht hatte ich noch gar nichts.
das setFocus klappt aber auch nicht.
Allerdings ist mir auch grade aufgefallen, dass ich gar kein Event habe, um das auszul├Âsen.
Ich wollte bei foobar in der Album Liste den Focus gleich auf die Textbox setzen zum suchen. Ich k├Ânnte schw├Âren, dass es da fr├╝her mal ein Task.Activated.foobar2000 oder Task.Created.foobar2000 gegeben hat. Scheine ich mich aber wohl geirrt zu haben.
Nach welchem Schema erzeugen denn auch einzelene neue Fenster einer ereits laufenden ein Task.* Event?
das setFocus klappt aber auch nicht.
Allerdings ist mir auch grade aufgefallen, dass ich gar kein Event habe, um das auszul├Âsen.
Ich wollte bei foobar in der Album Liste den Focus gleich auf die Textbox setzen zum suchen. Ich k├Ânnte schw├Âren, dass es da fr├╝her mal ein Task.Activated.foobar2000 oder Task.Created.foobar2000 gegeben hat. Scheine ich mich aber wohl geirrt zu haben.
Nach welchem Schema erzeugen denn auch einzelene neue Fenster einer ereits laufenden ein Task.* Event?
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Dann hatte ich mich doch nicht getäuscht. Ohne brauche ich das aber auch nicht wirklich weiter probieren.Bitmonster wrote:Wenn das letzte aktivierte Fenster schon von Foobar war, dann kommt kein weiterer Task.Activated.foobar2000.
Das hatte ich extra unterdr├╝ckt, weil sonst oft Massen von Events kommen.
FUnktioniert aber trotzdem nicht.
Code: Select all
import win32gui
import win32api
import ctypes
import win32ui
for hwnd in eg.lastFoundWindows:
# Check to see if we are the foreground thread
win = win32ui.CreateWindowFromHandle(hwnd)
try:
h = win32gui.GetForegroundWindow()
foregroundThreadID, processID = win32api.GetWindowThreadProcessId(h)
except:
foregroundThreadID = None
ourThreadID = win32api.GetCurrentThreadId()
# If not, attach our thread's 'input' to the foreground thread's
if foregroundThreadID != ourThreadID:
ctypes.windll.user32.AttachThreadInput(foregroundThreadID, ourThreadID, True)
win.SetFocus()
# Force our window to redraw
win.InvalidateRect()
if foregroundThreadID != ourThreadID:
ctypes.windll.user32.AttachThreadInput(foregroundThreadID, ourThreadID, False)
print "focus"- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Man muss es auch richtig machen:
Vorher muss ein BringToFront stehen.
Code: Select all
import win32gui
import win32api
import ctypes
import win32process
h = win32gui.GetForegroundWindow()
foregroundThreadID, processID = win32process.GetWindowThreadProcessId(h)
ourThreadID = win32api.GetCurrentThreadId()
if foregroundThreadID != ourThreadID:
ctypes.windll.user32.AttachThreadInput(foregroundThreadID, ourThreadID, True)
win32gui.SetFocus(eg.lastFoundWindows[0])
if foregroundThreadID != ourThreadID:
ctypes.windll.user32.AttachThreadInput(foregroundThreadID, ourThreadID, False)
ah, wenn man das richtige Paket nimmt und den Fehler nicht noch abfangen w├╝rde k├Ânnte es klappen 
Mir ist es sowieso ein Rätsel nach welchem Schema die ganzen API Calls auf die Pakete aufgeteilt sind. Und woher soll man eigentlich wissen, dass man da solche Spärenzchen mit AttachThreadInput machen muss. Die Doku ist auch nicht zu ausführlich bei sowas.
Mir ist es sowieso ein Rätsel nach welchem Schema die ganzen API Calls auf die Pakete aufgeteilt sind. Und woher soll man eigentlich wissen, dass man da solche Spärenzchen mit AttachThreadInput machen muss. Die Doku ist auch nicht zu ausführlich bei sowas.
- Bitmonster
- Site Admin
- Posts: 2239
- Joined: Mon Feb 06, 2006 10:28 pm
Wenn es um solche Sachen geht, dann muss man sich auch immer die MSDN-Doku zu den Funktionen anschauen. Die ganzen win32* Module sind ja nur Portierungen auf Python-Datentypen. Tja, und wenn man bei MSDN nach SetFocus sucht, dann findet man auch den Trick mit AttachThreadInput :
MSDN SetFocus
MSDN SetFocus