How do you force a java swt program to “move itself to the foreground”?

后端 未结 6 416
逝去的感伤
逝去的感伤 2020-12-15 22:20

Currently with swt, I sometimes want a program to arbitrarily come to the foreground (like an alarm clock might).

Typically the following works (jruby):



        
6条回答
  •  天命终不由人
    2020-12-15 22:51

    http://github.com/rdp/redcar/commit/d7dfeb8e77f13e5596b11df3027da236f23c83f0

    shows how I did it in windows, anyway (using ffi).

    A couple of helpful tricks "may" be

    add a 'sleep 0.1' after the BringToFront.SetForegroundWindow(wanted) call (hopefully this one isn't actually necessary).

    add a shell.set_active after you have brought the window to the foreground. For some reason forceActive doesn't call setActive.

    NB that setActive does a user32.dll BringWindowToTop call, and needs to be done before you detach thread input.

    Note also that it appears if you can do you calls in the right order you may not need to use the thread input hack at all (?)

    http://betterlogic.com/roger/?p=2950

    (contains several good hints on how to actually do this right)

    On Linux, forceActive does work--but only until you move to another few windows,, then it blinks in the taskbar after that (only). Guessing swt bug. [1]

    Also related:

    How to bring a window to the front?

    http://github.com/jarmo/win32screenshot/blob/master/lib/win32/screenshot/bitmap_maker.rb#L110 "set_foreground" which seems to work with both xp and windows 7

    [1] Need to bring application to foreground on Windows and https://bugs.eclipse.org/bugs/show_bug.cgi?id=303710

提交回复
热议问题