rog*_*ack 16 java shell user-interface swt foreground
目前有了swt,我有时想要一个程序随意地走到前台(就像闹钟一样).
通常以下作品(jruby):
@shell.setMinimized(false)
@shell.forceActive
Run Code Online (Sandbox Code Playgroud)
如果它被最小化,它会将壳体带到前面.
随时创建一个新shell也会将(新shell)带到前面.
到目前为止,如果shell 没有最小化,上面的代码只是闪烁(闪烁)任务栏中的应用程序图标.实际上,当你第一次运行它时,它会把它带到前面.之后,它只是在任务栏中闪烁.那是窗户.在Linux上,它似乎只在任务栏中闪烁(默认为ubuntu).
有人知道一个跨平台的方式让应用程序来到前面,在swt?
似乎没有任何forceActive的setActive setMinimized(false)setFocus forceFocus和setVisible都可以完成这件事.
我很确定它是可能的(至少在Windows中),就像E文本编辑器那样.嗯,这不是swt,但至少其他一些应用程序已经知道这样做.
我想也许这是swt bug 192036?
非常感谢.
有关:
http://github.com/rdp/redcar/commit/d7dfeb8e77f13e5596b11df3027da236f23c83f0
显示我是如何在Windows中完成的(无论如何)(使用ffi).
一些有用的技巧"可能"
在BringToFront.SetForegroundWindow(想要)调用之后添加'sleep 0.1'(希望实际上不需要这个).
将窗口置于前台后添加shell.set_active .由于某种原因,forceActive不会调用setActive.
请注意,setActive会执行user32.dll BringWindowToTop调用,并且需要在分离线程输入之前完成.
另请注意,如果您可以按正确的顺序进行调用,则可能根本不需要使用线程输入hack(?)
http://betterlogic.com/roger/?p=2950
(包含几个关于如何正确执行此操作的好提示)
在Linux上,forceActive 确实有效 - 但只有在你移动到另外几个窗口之后,它才会在那之后(仅)在任务栏中闪烁.猜swt bug.[1]
还有关系:
http://github.com/jarmo/win32screenshot/blob/master/lib/win32/screenshot/bitmap_maker.rb#L110 "set_foreground",这似乎与工作两者 XP和Windows 7
[1] 需要在Windows上将应用程序带到前台并https://bugs.eclipse.org/bugs/show_bug.cgi?id=303710
小智 6
这在Windows 7和Ubuntu上对我有用:
private void bringToFront(final Shell shell) {
shell.getDisplay().asyncExec(new Runnable() {
public void run() {
shell.forceActive();
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10284 次 |
| 最近记录: |