Page 1 sur 1

[R] Script pour empêcher la mise en veille des écrans

Posté : ven. 25 sept. 2015 12:07
par dnij
Bonjour,
Travaillant à la supervision du réseau mobile, j'ai besoin de créer un script pour que 2 de nos TV de supervision ne se mettent pas en veille.
J'ai également la contrainte de pouvoir arrêter le script avec une touche du clavier au cas où mes collègues ou moi-même aient besoin de travailler sur cette machine.
J'ai donc récupérer les coordonnées des 2 écrans et ai créé le script suivant :

Code : Tout sélectionner

#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

; la descripition de mon script, je vous passe les détails ;)
While Not _IsPressed("1B", $hDLL)
        MouseMove(-33,10,25)
        MouseMove(45,10,25)
        Sleep(900000)
WEnd
        MsgBox(4096, "Arrêt du script", "Le script n'est plus actif. Pour éviter la mise en veille des écrans, merci de relancer souris.au3 depuis le bureau.")
DllClose($hDLL)
Je pense que mon problème saute aux yeux : le sleep étant inclus dans la boucle, il faut appuyer sur la touche Échap pile au bon moment pour arrêter le script, ça ne me convient donc pas. J'aimerais que le script se coupe en appuyant sur la touche Échap à n'importe quel moment.
Merci d'avance pour vos conseils.

Re: [..] Script pour empêcher la mise en veille des écrans

Posté : ven. 25 sept. 2015 13:13
par TomAijerrie

Code : Tout sélectionner

HotKeySet("{esc}","Quitter")

While 1
        MouseMove(MouseGetPos(0) + 1 +(-2)*Random(0,1,1), MouseGetPos(1),0);pour décaler aléatoirement la souris de 1 pixel vers la gauche ou la droite, ça dérange moins l'utilisateur
        Sleep(900000)
WEnd

Func Quitter()
        MsgBox(4096, "Arrêt du script", "Le script n'est plus actif. Pour éviter la mise en veille des écrans, merci de relancer souris.au3 depuis le bureau.")
        Exit
EndFunc
 
Sinon tu diminue le délais d'attente et tu laisse la touche echap enfoncé

Re: [..] Script pour empêcher la mise en veille des écrans

Posté : ven. 25 sept. 2015 13:26
par dnij
TomAijerrie a écrit :

Code : Tout sélectionner

HotKeySet("{esc}","Quitter")

While 1
        MouseMove(MouseGetPos(0) + 1 +(-2)*Random(0,1,1), MouseGetPos(1),0);pour décaler aléatoirement la souris de 1 pixel vers la gauche ou la droite, ça dérange moins l'utilisateur
        Sleep(900000)
WEnd

Func Quitter()
        MsgBox(4096, "Arrêt du script", "Le script n'est plus actif. Pour éviter la mise en veille des écrans, merci de relancer souris.au3 depuis le bureau.")
        Exit
EndFunc
 
Sinon tu diminue le délais d'attente et tu laisse la touche echap enfoncé
C'est ce que je fais déjà, mais ça ne m'arrange pas. De +, en laissant la touche Échap enfoncée, la fenêtre de dialogue qui avertit que l'on a coupé le script se ferme sans que l'on puisse la lire.

Re: [..] Script pour empêcher la mise en veille des écrans

Posté : ven. 25 sept. 2015 13:34
par TomAijerrie
Tu as essayé avec mon code ?
HotKeySet ne t'oblige pas à laisser la touche enfoncée

Sinon pourquoi ne pas désactiver la mise en veille, la mise en veille prolonger, l’arrêt du moniteur et des disques durs dans les Options d’alimentation ?

Re: [..] Script pour empêcher la mise en veille des écrans

Posté : ven. 25 sept. 2015 15:10
par dnij
TomAijerrie a écrit :Tu as essayé avec mon code ?
HotKeySet ne t'oblige pas à laisser la touche enfoncée

Sinon pourquoi ne pas désactiver la mise en veille, la mise en veille prolonger, l’arrêt du moniteur et des disques durs dans les Options d’alimentation ?
Désolé je n'avais pas vu ton code.
Tu as résolu mon problème. Étant donné que je dois empêcher la mise en veille sur 2 TV qui sont reliées au même PC je ne peux pas déplacer d'1 seul pixel, sinon la souris ne va pas sur l'écran 2 et il passe en veille au bout de 15 minutes.
Je ne peux pas désactiver la mise en veille car les options d'alimentation sont administrées. J'ai déjà contacté les admins qui ne savent pas faire eux-mêmes :?
Bref, tout fonctionne comme je le veux maintenant, la souris passe d'un écran à l'autre toutes les 15 minutes, avertit l'utilisateur qu'un script est en cours, on peut arrêter le script en appuyant brièvement sur la touche Échap et la boîte de dialogue apparaît pour prévenir l'utilisateur. Un grand merci à toi !!!
Le script final, si ça peut aider du monde :

Code : Tout sélectionner

#include <MsgBoxConstants.au3>

; 
; AutoIt Version: 3.0
; Language:       Français
; Plate-forme:       Windows 7
; Auteur:         ********
;
; Fonction:
;   Bouger la souris automatiquement d'un écran à l'autre, selon une période de temps donnée en appelant la fonction Sleep.
;   De cette manière, le(s) écran(s) ne se mettent jamais en veille.
;

; Tant que la touche "Échap" n'est pas appuyée, la souris passe d'un écran à l'autre toutes les 15 minutes.

HotKeySet("{esc}","Quitter")

While 1
      MouseMove(-33,10,15) ; Envoie le curseur de la souris sur l'écran 1
      MouseMove(45,10,15) ; Envoie le curseur de la souris sur l'écran 2
          Sleep(900000)
      MsgBox(270384, "Script en cours", "Afin d'empêcher la mise en veille des écrans, un script fait bouger la souris automatiquement toutes les 15 minutes. Appuyer sur OK, puis sur Échap pour le désactiver.", 15)
WEnd

Func Quitter()
      MsgBox(270400, "Arrêt du script", "Le script n'est plus actif. Pour empêcher la mise en veille des écrans, merci de relancer souris.au3 depuis le bureau.")
      Exit
EndFunc

Re: [..] Script pour empêcher la mise en veille des écrans

Posté : ven. 25 sept. 2015 15:41
par orax
L'API Windows propose la fonction SetThreadExecutionState pour empêcher la mise en veille. Je pense que le code suivant devrait également fonctionner (je l'ai testé sur Windows 10).
► Afficher le texte
J'ai supprimé la coloration syntaxique dans tes messages car, étant consommatrice de données et afin de limiter la saturation de la base de donnée, il est préférable de l’utiliser uniquement dans les forums 'Exemples de Scripts', 'Fonctions et UDF' et 'Tutoriels'.
Quand le sujet sera résolu, merci d'éditer le premier message et de remplacer [..] par [R] dans le titre.

Re: [..] Script pour empêcher la mise en veille des écrans

Posté : ven. 25 sept. 2015 21:27
par dnij
J'essaierai ça à l'occasion. Merci à vous en tout cas pour vous solutions et votre réactivité.