Comment puis-je flasher la barre des tâches Windows en utilisant Swing?

Je développe une application Swing et je dois flasher la barre des tâches Windows. Je ne peux pas utiliser frame.requestFocus() car je ne veux pas voler le focus d’une autre application.

Je ne sais pas si cela s’applique aux versions plus récentes de Windows, mais la méthode .toFront () permettait de faire clignoter la fenêtre si aucune des fenêtres de la machine virtuelle actuelle n’était au premier plan.

Cela signifie que l’appel de frame.toFront () sur une image réduite le ferait toujours clignoter …

JNIWrapper avec son extension winpack peut faire ce que vous voulez.

La démonstration sur le site le montre en action.

Vous pouvez soit forcer-minimiser votre interface graphique et .toFront -en:

  Gui.frame.setState(Frame.ICONIFIED); for (int i = 0; i < 3; i++) { Thread.sleep(10); Gui.frame.toFront(); Thread.sleep(10); Gui.frame.setVisible(false); Thread.sleep(10); Gui.frame.toBack(); Thread.sleep(10); Gui.frame.setVisible(true); } // be creative!! 

ce qui, malheureusement, supprimera le focus de la fenêtre active. Vous pouvez trouver la fenêtre active et la réactiver par la suite. Néanmoins, le clignotement ne durera que trois secondes environ.

... ou FlashWindow au FlashWindow des choses en utilisant un FlashWindow DLL sur FlashWindow . L'appel de dll n'est pas possible avec du code Java propre, vous aurez besoin de l'aide d'autres langages de programmation, possibles par exemple avec JNA . Sinon, vous pouvez également écrire votre propre programme dans un autre langage et l'appeler à partir de votre application Java. Je vais donner un exemple dans AutoHotkey ci-dessous:

Code AutoHotkey:

  if 0 != 1 ; note: in ahk, 1 corresponds args[1] and 0 corresponds args.length { msgbox, There needs to be ONE parameter passed over to this file, which is the name of the window that should be flashed. ExitApp } programName = %1% winget, hWnd, ID, %programName% DllCall("FlashWindow",UInt,hWnd,Int,True) 

compilé dans un fichier appelé flash.exe , placé dans votre répertoire de travail Java, vous pouvez l’appeler à partir de n’importe quelle fonction:

  Runtime.getRuntime().exec("./flash.exe \"" + MyJFrame.getTitle() + "\""); 

Autrement, on pourrait utiliser AutoHotkey.dll et y accéder au sein du Javacode (il existe des guides expliquant comment le faire sur Internet), de sorte qu'aucun fichier exe externe ne soit nécessaire.

Si vous avez toujours des problèmes pour réaliser le clignotement dans la barre des tâches de Windows, veuillez me le faire savoir!

La meilleure façon de faire ceci:

 if (!isFocused()) { setVisible(false); setVisible(true); } 

En utilisant Swing en soi, vous ne pourrez probablement pas; c’est une chose spécifique à Widnows.