web-dev-qa-db-fra.com

Comment puis-je empêcher un verrouillage d'écran imposé par une stratégie dans Windows 7?

Notre entreprise BOFH impose le réglage du verrouillage de l’écran dans un délai ridiculement court. C'est frustrant et contre-productif.

Est-il possible d'empêcher le verrouillage automatique de l'écran? Je suppose qu'il n'y a aucun moyen de remplacer le paramètre appliqué par la stratégie, mais peut-être existe-t-il un logiciel qui imite l'activité de l'utilisateur.

Il suffit de demander avant de configurer une molette de la souris perpétuelle. (trouver?)

92
Gabriel R.

J'utilise un script I title idle.vbs:

Dim objResult

Set objShell = WScript.CreateObject("WScript.Shell")    

Do While True
  objResult = objShell.sendkeys("{NUMLOCK}{NUMLOCK}")
  Wscript.Sleep (6000)
Loop

Toutes les six secondes, cette touche bascule rapidement le pavé numérique, ce qui fait croire à Windows que quelqu'un interagit avec le clavier, ce qui empêche le verrouillage de l'écran. Cela fonctionne sur les fenêtres Vanilla, vous n'avez pas besoin d'outils de développement ou de script pour l'utiliser, créez simplement un fichier texte avec l'extension .vbs et double-cliquez dessus (ou placez-le dans vos éléments de démarrage).

Edit: vous pouvez mettre ce script dans vos éléments de démarrage avec

 choco install IdleVbs -source https://www.myget.org/F/joshrivers-utility/

Pour plus d’informations sur l’installateur CLI de Choclatey (choco), veuillez consulter:

https://chocolatey.org/

79
JoshRivers

Si Windows Media Player est toujours installé, vous pouvez lire une vidéo en boucle et la réduire (les exemples de vidéos "Faune" fonctionnent bien pour cela). Par défaut, tant qu'une vidéo est en cours de lecture, l'écran ne se verrouille pas.

81
omaha_brad

Une autre option est le programme freeware Caffeine . Il est également gratuit pour un usage commercial. À partir de la page d'accueil du programme:

Si vous rencontrez des problèmes de verrouillage ou d’endormissement de votre ordinateur, la caféine le gardera éveillé. Cela fonctionne en simulant une pression de touche une fois toutes les 59 secondes, de sorte que votre ordinateur pense que vous travaillez toujours au clavier. Ne verrouillez pas l'écran et n'activez pas l'économiseur d'écran.

La caféine simule un événement clé F15 toutes les 59 secondes. Parmi tous les appuis disponibles, F15 est probablement le moins intrusif (je n’ai jamais vu de clavier de PC avec cette touche!) Et le moins susceptible d’interférer avec votre travail.

Cette solution prête à l'emploi vous permet également de contrôler quand l'activer et de la désactiver:

Double-cliquez sur l'icône du programme pour vider la cafetière (ce que représente l'icône) et désactiver temporairement le programme. Double-cliquez dessus pour remplir à nouveau le pot et garder votre machine en veille.

14
Ilya Kurnosov

Vous pouvez créer un script AutoIt pour appuyer continuellement sur une touche inutilisée (par exemple, l'activer/désactiver le verrouillage du pavé numérique, le verrouillage du défilement), de passer en mode veille environ une minute et de répéter l'opération. Alternativement, si vous utilisez beaucoup le clavier, vous pouvez le faire bouger la souris d'un pixel ou plus dans n'importe quelle direction.

Si vous ne souhaitez pas qu'il continue à fonctionner, vous pouvez également lancer le script en tant que tâche planifiée (si vous y avez accès) pour le lancer après que l'ordinateur soit resté inactif pendant un certain temps.

Et ceci est un script très simple pour effectuer un mouvement de souris invisible, si vous ne voulez pas entrer dans la syntaxe AutoIt:

While True
   Local $pos = MouseGetPos()
   MouseMove($pos[0]-1, $pos[1]-1, 0)
   MouseMove($pos[0], $pos[1], 0)
   Sleep(540000)
WEnd

Ce script déplace le curseur de la souris d’un pixel vers le haut et à gauche, puis le restitue en arrière pendant 9 minutes (540000 millisecondes). Lorsque le script est en cours d'exécution, vous pouvez voir l'icône AutoIt dans la barre d'état. Vous pouvez l'arrêter en cliquant avec le bouton droit sur cette icône et en choisissant l'option correspondante.

Pour créer un script, installez AutoIt, cliquez avec le bouton droit de la souris sur n’importe quel dossier et choisissez New> AutoIt v3 Script, nommez-le, cliquez-droit sur ce nouveau script, choisissez Edit, collez le code fourni ci-dessus, puis enregistrez. Vous pouvez même le compiler dans .exe (à nouveau, à partir du menu contextuel) pour démarrer, par exemple, à partir du planificateur Windows.

7
Breakthrough

Compilez-le dans Visual Studio ou C # Express et exécutez-le à partir d'une invite de commande (ou double-cliquez dessus). Nécessite .NET 4.0 ou supérieur. Il fait tout ce que vous recherchez.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Threading;
using System.Runtime.InteropServices;
using System.Windows.Forms; 

namespace ImWorkin
{
    class Program
    {
        [FlagsAttribute]
        public enum EXECUTION_STATE : uint
        {
            ES_SYSTEM_REQUIRED = 0x00000001,
            ES_DISPLAY_REQUIRED = 0x00000002,
            ES_CONTINUOUS = 0x80000000
        }
        public SYSTEMTIMEOUTS TimeOuts
        {
            get { return sysTimeouts; }
        }
        public struct SYSTEMTIMEOUTS
        {
            public int BATTERYIDLETIMEOUT;
            public int EXTERNALIDLETIMEOUT;
            public int WAKEUPIDLETIMEOUT;
        }

        [DllImport("USER32.DLL", CharSet = CharSet.Unicode)]
        public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("USER32.DLL")]
        public static extern bool SetForegroundWindow(IntPtr hWnd);

        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE flags);

        [DllImport("user32.dll", SetLastError = true, EntryPoint ="SystemParametersInfo")]
        internal static extern int SystemParametersInfo(int uiAction, int uiParam, ref int pvParam, int fWinIni);

        private static System.Threading.Timer preventSleepTimer = null;
        public const int SPI_GETBATTERYIDLETIMEOUT = 252;
        public const int SPI_GETEXTERNALIDLETIMEOUT = 254;
        public const int SPI_GETWAKEUPIDLETIMEOUT = 256;
        public static int Counter = 0;
        public static int timeOutinMS = 0;
        public static int batteryIdleTimer;
        public static int externalIdleTimer;
        public static int wakeupIdleTimer;
        public static SYSTEMTIMEOUTS sysTimeouts;


        static void Main(string[] args)
        {
            Console.WriteLine("You are about to be workin!! Just a moment...I need to calculate a few values.");
            string dots = string.Empty;
            for (int i =2; i < 60; i++)
            {
                dots = "";
                for (int ii = 0; ii < i; ii++)
                {
                    dots = dots + ".";
                }
                Thread.Sleep(100);
                Console.Clear();
                Console.WriteLine("You are about to be workin!! Just a moment...I need to calculate a few values.");
                Console.WriteLine(dots);
            }


            GetSystemTimeOuts();


            if (timeOutinMS < sysTimeouts.BATTERYIDLETIMEOUT)
                timeOutinMS = sysTimeouts.BATTERYIDLETIMEOUT;
            if (timeOutinMS < sysTimeouts.EXTERNALIDLETIMEOUT)
                timeOutinMS = sysTimeouts.EXTERNALIDLETIMEOUT;
            if (timeOutinMS < sysTimeouts.WAKEUPIDLETIMEOUT)
                timeOutinMS = sysTimeouts.WAKEUPIDLETIMEOUT;

            if (timeOutinMS == 0)
                timeOutinMS = 30;

            DisableDeviceSleep();
            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("OK. I have calculated your computers timeout periods and set the   ");
            Console.WriteLine("necessary hooks. Your computer will not shut off the monitor, will");
            Console.WriteLine("show active in any chat programs,the screensaver is disabled and ");
            Console.WriteLine("the computer will not lock! Anyone looking at you eaither locally ");
            Console.WriteLine("or remotely will think you are hard at work.");
            Console.WriteLine("");
            Console.WriteLine("Now go do something fun...I got your back ;)");
            Console.WriteLine("Oh yeah....if you close this window OR press `q' in this ");
            Console.WriteLine("window you are going to have to actually work.");
            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("This text will disappear in a 30 seconds. Just in case someone comes ");
            Console.WriteLine("by and reads your screen!");
            Console.WriteLine("");
            Console.WriteLine("");
            Console.WriteLine("Need custom coding? [email protected]");
            while (Console.KeyAvailable == false)
            {
                Thread.Sleep(250);
                ConsoleKeyInfo cki = Console.ReadKey(true);

                if (cki.KeyChar == 'q')
                    break;
            }

        }


        public static void DisableDeviceSleep()
        {
           SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS);
           preventSleepTimer = new System.Threading.Timer(new TimerCallback(PokeDeviceToKeepAwake), null, 0, timeOutinMS * 1000);
        }

        public static void EnableDeviceSleep()
        {

           preventSleepTimer.Dispose();
           preventSleepTimer = null;

        }

        private static void PokeDeviceToKeepAwake(object extra)
        {

            Counter++;
            try
            {
                   SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED | EXECUTION_STATE.ES_CONTINUOUS);
                   IntPtr Handle = FindWindow("SysListView32", "FolderView");

                   if (Handle == IntPtr.Zero)
                   {
                       SetForegroundWindow(Handle);
                       SendKeys.SendWait("%1");
                   }

                   if (Counter > 1)
                       Console.Clear();
            } 
            catch 
            {

            }
        }

        public static void GetSystemTimeOuts()  
        {
            sysTimeouts.BATTERYIDLETIMEOUT = -2;
            sysTimeouts.EXTERNALIDLETIMEOUT = -2;
            sysTimeouts.WAKEUPIDLETIMEOUT = -2;


            if (SystemParametersInfo(SPI_GETBATTERYIDLETIMEOUT, 0, ref batteryIdleTimer, 0) == 1)
                sysTimeouts.BATTERYIDLETIMEOUT = batteryIdleTimer;
            else
                sysTimeouts.BATTERYIDLETIMEOUT = -1;

            if (SystemParametersInfo(SPI_GETEXTERNALIDLETIMEOUT, 0, ref externalIdleTimer, 0) == 1)
                sysTimeouts.EXTERNALIDLETIMEOUT = externalIdleTimer;
            else
                sysTimeouts.EXTERNALIDLETIMEOUT = -1;



            if (SystemParametersInfo(SPI_GETWAKEUPIDLETIMEOUT, 0, ref wakeupIdleTimer, 0) == 1)
                sysTimeouts.WAKEUPIDLETIMEOUT = wakeupIdleTimer;
            else
                sysTimeouts.WAKEUPIDLETIMEOUT = -1;


        }
    }
}
5
user205533

Il existe une application Android appelée "Timeout Blocker" qui vibre à intervalles réguliers et vous pouvez y placer votre souris. Il dit cependant de ne pas l'utiliser au travail. https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&hl=fr

5
Matt

Dans mon cas, seule cette ligne a fait l'affaire:

SendKeys.Send("{CAPSLOCK}");

Il suffit de le mettre dans l'événement Timer_Tick et de définir l'intervalle du minuteur sur, par exemple. 60000ms.

1
user3540753

J'aime utiliser easy et integrated options ( pas de logiciel supplémentaire ), comme un script powershell (merci https://dmitrysotnikov.wordpress.com/ 2009/06/29/prevent-desktop-lock-or-screensaver-with-powershell/ ) qui utilise le "f15" comme clé du succès (merci à la caféine. En effet, c'est le moins gênant)

param($minutes = 180)

write "... screen will be awake for $minutes"

 $myshell = New-Object -com "Wscript.Shell"

 for ($i = 0; $i -lt $minutes; $i++) {
 write "... screen will be awake for" ($minutes-$i)
 Start-Sleep -Seconds 60    
 $myshell.sendkeys("{F15}")
}

Placez ceci dans myScriptName.ps1 et démarrez-le via un raccourci sur le bureau ou en ligne de commande: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop "C:\Users\myUser\Desktop\myScriptName.ps1"

UPDATE: Peut-être que l'administrateur a changé, mais cela ne fonctionne plus pour moi. Maintenant, je dois utiliser un script autohotkey de NBirnel: https://github.com/nbirnel/ nosleep - this work perfect , car il déplace la souris (sans gêner le travail)

1
eli

Mouse Jiggler pourrait être une option: https://mousejiggler.codeplex.com/

1
KERR