Wie erzwingen Sie eine java swt-Programm "bewegt sich selbst in den Vordergrund"?
Derzeit mit swt, ich manchmal ein Programm soll beliebig zum Vorschein kommen (wie ein Wecker könnte).
In der Regel die folgenden arbeiten (jruby):
@shell.setMinimized(false)
@shell.forceActive
Dieser bringt die Schale auf der Vorderseite, wenn es minimiert wurde.
Erstellen Sie eine neue shell zu jeder Zeit bringt auch die (neue shell) auf der Vorderseite.
So weit So gut, jedoch, wenn die Schale nicht minimiert, der obige code blinkt (blinkt) das app-icon in der Taskleiste. Naja, eigentlich das erste mal, wenn Sie es ausführen, bringt es nach vorne. Nach, dass es nur blinkt in der Taskleiste. Das ist windows. Auf Linux scheint es nur blinkt in der Taskleiste (ubuntu-Standard).
Weiß jemand von einer cross-Plattform-Weg, um die app zu kommen an die front, in der swt?
Es scheint, dass keine Beschwörungsformel forceActive setActive setMinimized(false) setFocus forceFocus und setVisible-Methode dies erreicht werden kann-Sache.
Ich bin mir ziemlich sicher, es ist möglich (zumindest in windows), als E-Text-Editor funktioniert es. Gut, das ist nicht swt, aber zumindest einige andere apps bekannt gewesen, es zu tun.
Ich mir denke, vielleicht ist das swt bug 192036?
Vielen Dank.
Verwandte:
- Wie bringt man ein Fenster auf der Vorderseite?
- Öffnen Sie eine Shell
- Halten Sie Fenster im Vordergrund (auch wenn es den Fokus verliert)
- Bug 244597 - Nicht aktivieren kann shell ein Programm auf gtk
- Mitbringen Anwendung in den Vordergrund zu stellen, die auf Windows
- Wie bringt man ein Fenster auf der Vorderseite? dieser swing Beispiel könnte es sein, irgendeine Art von Anhaltspunkt, zu...
- Sieht aus wie die SWT-Fehler, den Sie verbunden mit exakt Ihr problem beschreibt, und es klingt wie Sie nicht in der Lage, es zu beheben.
- Ich denke, das ist in der Tat das problem für windows-gut fangen. Umgehen, denn jetzt wird zum ersten minimieren, eine Schale, dann unminimize es (oder einige native code [via ffi oder jni] zu forceForeGround es). In Linux bin ich mir nicht ganz sicher, was das problem ist allerdings (nur blinkt in der Taskleiste). Es könnte behoben werden, in neueren Versionen von swt.jar >= 3.5 bugs.eclipse.org/bugs/show_bug.cgi?id=244597
Du musst angemeldet sein, um einen Kommentar abzugeben.
http://github.com/rdp/redcar/commit/d7dfeb8e77f13e5596b11df3027da236f23c83f0
zeigt wie ich es gemacht habe in windows sowieso (mit ffi).
Ein paar hilfreiche tricks "kann" sein
fügen Sie eine "sleep 0.1" nach dem BringToFront.SetForegroundWindow(wollte)
rufen Sie (hoffentlich, das man nicht wirklich notwendig).
fügen Sie eine shell.set_active nach Sie brachte das Fenster in den Vordergrund. Aus irgendeinem Grund forceActive nicht nennen setActive.
Beachten Sie, dass die setActive hat eine user32.dll BringWindowToTop-Aufruf, und muss getan werden, bevor Sie sich trennen, Gewinde-Eingang.
Beachten Sie auch, dass es erscheint, wenn Sie das tun können Sie Anrufe in der richtigen Reihenfolge, können Sie nicht brauchen, um verwenden Sie die thread-input-hack bei allen (?)
http://betterlogic.com/roger/?p=2950
(enthält einige gute Hinweise, wie dieses tatsächlich zu tun Recht)
Unter Linux, forceActive hat Arbeit--aber nur, bis du nach ein paar windows, dann blinkt es in der Taskleiste nach, dass (nur). Raten swt bug. [1]
Auch mit:
Wie bringt man ein Fenster auf der Vorderseite?
http://github.com/jarmo/win32screenshot/blob/master/lib/win32/screenshot/bitmap_maker.rb#L110 "set_foreground", das scheint zu funktionieren mit beide xp und windows 7
[1] Mitbringen Anwendung in den Vordergrund zu stellen, die auf Windows und https://bugs.eclipse.org/bugs/show_bug.cgi?id=303710
Dieser arbeitete für mich auf Windows 7 und Ubuntu:
Dies ist eigentlich ein feature von Windows, welches aktiviert werden kann über das Tweak UI power toy (zumindest für Windows XP). Wenn aktiviert, kann der O/S bewusst verhindert, dass ein Fenster aus zwingen sich das fokussierte Fenster, um es zu stoppen "stealing focus". Als solche, die action zu packen Fokus geändert, um nur blinkt das Symbol in der Taskleiste - da der O/S ist bewusst das konvertieren der Aktion auf Wunsch des Nutzers, es gibt nichts, was Sie dagegen tun können (und das ist eine gute Sache).
War dies (wahrscheinlich) gemacht, weil so viele Anwendungen missbraucht die bring-to-front-API und das Verhalten der beiden verärgert Benutzer und bewirkt, dass Sie Eingang in die falschen Anwendung.
Bug 192036 - Shell.forceActive nicht erhöhen ein Fenster über allen anderen Fenstern
@rogerdpack die Abfrage auf Eclipse-bug-tracker war, antwortete mit den folgenden dirty workaround tun, was wir brauchen.
Es ist ein Weg, um es arbeiten mit dem, was Sie versucht anfangs. Sie tatsächlich benötigen, rufen Sie
shell.setMinimized(false)
und nach, dassshell.setActive()
um den vorherigen Zustand wiederherzustellen dershell
. Jedoch, das funktioniert nur, wenn dieshell
war wirklich im minimierten Zustand. So, hier ist meine Letzte Lösung, die künstlich minimiert dieshell
wenn es nicht bereits minimiert. Die Kosten ist eine kurze animation, wenn die Minimierung durchgeführt werden muss.