4Fermer6
Pen^2Le 26/11/2015 à 17:21
squalyl ./2 : sans doute, si, mais j'espérais une simple fonction documentée au début grin

Alors en effet, j'ai testé et ça a l'air de fonctionner (au moins sous CentOS, Java 7) :
import java.awt.Component ;
import java.lang.reflect.Field ;
import java.lang.reflect.Method ;

import javax.swing.JFrame ;

public class W
{
   public static void main( String[] args )
         throws Exception
   {
      JFrame jf= new JFrame() ;
      jf.setBounds(50, 50, 150, 80) ;
      jf.setTitle("Test Window") ;
      jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ;
      jf.setVisible(true) ;

      //http://elliotth.blogspot.fr/2007/08/transparent-java-windows-on-x11.html
      //long windowId = peer.getWindow() ;
      Long windowId ; {
         Field peerField= Component.class.getDeclaredField("peer") ;
         peerField.setAccessible(true) ;
         Class<?> xWindowPeerClass= Class.forName("sun.awt.X11.XWindowPeer") ;
         Method getWindowMethod= xWindowPeerClass.getMethod("getWindow", new Class[0]) ;
         windowId= ((Long)getWindowMethod.invoke(peerField.get(jf), new Object[0])) ;
      }

      String cmd= "xdg-screensaver suspend 0x"+Long.toHexString(windowId) ;
      System.out.println(cmd) ;
      Runtime.getRuntime().exec(cmd) ;
      System.out.println("0x"+Long.toHexString(windowId)) ;
   }
}
Reste plus qu'à trouver un truc équivalent sous OSX cheeky
Merci !

PS : xdg-screensaver status pour connaître l'état du système, et on remarque que tout est rétabli à la fermeture de la fenêtre. On peut aussi (et c'est sans doute une bonne idée ?) faire un xdg-screensaver resume windowId en fermant la fenêtre.