Laden...

Eigenes Fenster aktivieren und Focus setzen (obwohl ein Fenster einer anderen Anwendung aktiv ist)

Erstellt von vitafit vor 12 Jahren Letzter Beitrag vor 12 Jahren 4.607 Views
vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren
Eigenes Fenster aktivieren und Focus setzen (obwohl ein Fenster einer anderen Anwendung aktiv ist)

Guten Morgen allerseits,

ich arbeite gerade an einem all zu häufig bekanntem Problem. Dem Focus von Fenstern. Ich habe nun 3 Stunden und mehr damit verbracht, dieses Forum, Google und sonstige Quellen nach einer funktionierenden Lösung zu durchsuchen. Ich nutze Windows 7. Alle Lösungsansatze mit Win32API (SetForGroundWindow usw...) inklsuvie diverser verzweifelter .NET Methoden:


this.Focus();                               // Focus auf Form setzen
                this.TopMost = true;
                this.textBox1.Focus();                      // Focus auf Text setzen
                this.textBox1.Select();               
                this.ActiveControl = this.textBox1;
                this.BringToFront();
                this.textBox1.BringToFront();
                this.textBox1.Focus();
                this.textBox1.ScrollToCaret();  

schlugen viel. Ich bin mir relativ sicher, dass die Art und Weise wie ich sie angewendet habe, richtig war. Schließlich ist es mehr als ausreichend dokumentiert und von den vielen Beispielen wollen wir garnicht reden. Nichts desto trotz funktioniert es nicht. Mein Ziel ist folgendes:

Ich prüfe im Moment einen globalen Keyboard-Hook welcher tadellos funktioniert. In dem Moment wo ich eine Taste-Drücke, soll die TextBox1 auf meinem Form in den absoluten Focus geraten. Das tut sie grundsätzlich ja auch, erkannbar daran, dass der schwarze Strich blinkt. Der Focus liegt aber immer noch auf meinem anderen Fenster. Testweise meistens Notepad. Ich gebe also aktiv immer noch in Notepad Text ein. Ich wollte erst einfach über den Globla-Hook die Enter/Escape-Geschichten abfangen, macht aber im Nachhinein meines erachtens nach keinen Sinn. Ich kopiere den markierten Text, wenn ich also in nem Notepad etwas makriere und ENTER drücke dann ist es weg. Also nicht Sinn und Zweck der Übung.
Jetzt kommt ihr ins Spiel, wie bekomme ich den Focus vernünftig gelöst unter Windows 7? Ist übrigends nur eine Vermutung, muss nicht zwingend etwas mit Windows 7 zutun haben.

Danke!

771 Beiträge seit 2009
vor 12 Jahren

Hi,

ich denke, daß liegt daran, daß du noch das Fenster deines eigenen Programms aktivieren mußt. Unter WinAPI geht dies mittels der SetForegroundWindow()-Funktion, d.h. von C# aus mittels P/Invoke: http://pinvoke.net/default.aspx/user32/SetForegroundWindow.html

Edit: seit WinXP wird dadurch jedoch nur das Window in der Taskbar "geflasht"
Evtl. mußt du dann BringWindowToTop() bzw. ShowWindow() probieren (oder in Kombination).

Ich bin mir aber generell nicht sicher, ob es unter Windows überhaupt noch machbar ist, ein Window programmgesteuert zu aktivieren (solange ein anderes Window aktiv ist und den Focus hat).

vitafit Themenstarter:in
23 Beiträge seit 2011
vor 12 Jahren

Danke für deine Antwort,
ich werde es testen und Rückmedung geben.