Bonjour,
Je m'entraine sur Java et les services windows et je m'arrache les cheveux depuis 2 jours sur le cas que je vous présente. Toute aide est appréciée.
J'ai fait un petit programme qui réalise une capture d'écran toutes les 5 secondes et rafraichit un fichier screenshot.gif (situé dans la racine du projet):
J'exporte le jar. Le programme marche très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import java.awt.*; public class Screenshot { public static void main(String[] args){ // determine le taille courante du screen Toolkit toolkit = Toolkit.getDefaultToolkit(); Dimension screenSize = toolkit.getScreenSize(); Rectangle screenRect = new Rectangle(screenSize); //creer le screenshot Robot robot = null; while(true){ try { robot = new Robot(); ImageIO.write(image, "gif" , new File("screenshot.gif")); } catch (AWTException e) {} } } }
J'en fais un executable via JSmooth, puis j'en fais un service avec le logiciel Exe to Service (en essai).
Je vais sur services.msc et démarre le service issu de mon exe.
Et là : incompréhension. Le service semble fonctionner mais il créé des fichiers screenshot.gif tous noirs et dont la dimension est 1024 x 768 alors que dans les étapes avant d'en faire un service les images sont 1680 x 1050, ce qui correspond à la résolution de mon écran.
Je pourrais en déduire qu'en tant que service la fonction getScreenSize n'arrive pas à trouver le bon écran et fait donc une copie dans le vide.
J'ai essayé de le faire de manière indirecte en passant par un service qui servait à faire un exec() de la version executable, même résultat !
Je suis à bout de solutions (à part tester la même chose en C++, ce qui me demandera la journée), donc si vous pouvez m'aider je vous serais très reconnaissant. Je posterai mes propres avancées au fur et à mesure.
Merci d'avance!
Partager