Como posso evitar um bloqueio de tela imposto no Windows 7?

77

Nosso BOFH corporativo impõe a configuração de bloqueio de tela com um atraso ridiculamente curto. É frustrante e contraproducente.

Existe uma maneira de evitar o bloqueio automático de tela? Eu diria que não há como substituir a configuração imposta pela política, mas talvez haja um software que imite a atividade do usuário.

Basta perguntar antes de configurar uma roda do mouse perpétua. (entendeu?)

    
por Gabriel R. 30.08.2011 / 10:32

11 respostas

65

Eu uso um script que eu título idle.vbs:

Dim objResult

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

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

A cada seis segundos, isso rapidamente alterna o numlock no teclado, fazendo com que o Windows acredite que alguém está interagindo com o teclado, impedindo o bloqueio de tela. Isso é executado em janelas comuns, você não precisa de ferramentas de desenvolvimento ou de script para usá-lo, basta criar um arquivo de texto com .vbs como extensão e clicar duas vezes nele (ou colocá-lo nos itens de inicialização).

Edit: você pode colocar este script em seus itens de inicialização com

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

Para mais informações sobre o instalador CLI Choclatey ( choco ), consulte:

link

    
por 05.11.2014 / 19:54
74

Se o Windows Media Player ainda estiver instalado, você poderá reproduzir um vídeo no loop e minimizá-lo (os exemplos de vídeos "Vida Selvagem" funcionam bem para isso). Por padrão, enquanto um vídeo estiver sendo reproduzido, a tela não será bloqueada.

    
por 10.04.2013 / 19:22
10

Ainda outra opção é freeware programa Cafeína . É livre para uso comercial também. Na página inicial do programa:

If you have problems with your PC locking or going to sleep, caffeine will keep it awake. It works by simulating a key-press once every 59 seconds, so your machine thinks you're still working at the keyboard, so won't lock the screen or activate the screensaver.

Caffeine works by simulating an F15 key up event every 59 seconds. Of all the key presses available, F15 is probably the least intrusive (I've never seen a PC keyboard with that key!), and least likely to interfere with your work.

Esta solução pronta para uso também permite controlar quando ativá-la e desativá-la:

Double-clicking the program icon empties the coffee pot, which is what the icon represents, and temporarily disables the program. Double-clicking it again refills the pot, and will keep your machine awake.

    
por 24.06.2015 / 19:31
7

Você pode criar um script AutoIt para pressionar continuamente uma tecla não usada (por exemplo, alternar o num lock, trava de rolagem), durma por um minuto ou mais e repita. Alternativamente, se você usa muito o teclado, você pode fazê-lo mover o mouse por um pixel em qualquer direção.

Se você não quiser que ele seja executado continuamente, você também pode iniciar o script como uma tarefa agendada (se tiver acesso) para iniciar depois que o computador ficar inativo por algum tempo.

E este é um script muito simples para executar uma movimentação invisível do mouse, se você não quiser entrar na sintaxe AutoIt:

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

Este script move o cursor do mouse em um pixel na direção para cima-esquerda e depois disso retorna-o, depois dorme por 9 minutos ( 540000 milissegundos). Quando o script está em execução, você pode ver o ícone AutoIt na bandeja. Você pode pará-lo clicando com o botão direito do mouse nesse ícone e escolhendo a opção correspondente.

Para criar um script, instale o AutoIt, clique com o botão direito do mouse em qualquer pasta e escolha New > AutoIt v3 Script , nomeie-o, clique com o botão direito do mouse nesse novo script, escolha Edit , cole o código fornecido acima e salve. Você pode até compilá-lo para .exe (novamente, no menu de contexto) para iniciar, por exemplo, no Windows Scheduler.

    
por 30.08.2011 / 16:59
5

Compile isso no Visual Studio ou no C # Express e execute-o a partir de um prompt de comando (ou clique duas vezes nele). Requer o .NET 4.0 ou superior. Faz tudo o que você procura.

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;


        }
    }
}
    
por 09.03.2013 / 04:28
5

Existe um aplicativo Android chamado "Timeout Blocker" que vibra em um intervalo e você pode colocar o mouse sobre ele. Diz não usá-lo no trabalho embora. link

    
por 06.06.2014 / 23:36
1

No meu caso, apenas esta linha fez o truque:

SendKeys.Send("{CAPSLOCK}");

Basta colocá-lo no evento Timer_Tick e definir o intervalo do timer como, por exemplo, 60000ms.

    
por 30.12.2014 / 09:17
1

Mouse Jiggler pode ser uma opção: link

    
por 23.05.2017 / 08:00
1

Eu gosto de usar as opções easy e integrated ( sem software adicional ), como um script powershell (obrigado link ) que usa o" f15 "como a chave para o sucesso (thx a cafeína. Na verdade, é menos interferir)

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}")
}

Coloque isso em um myScriptName.ps1 e inicie-o via atalho na área de trabalho ou linha de comando: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop "C:\Users\myUser\Desktop\myScriptName.ps1"

    
por 16.01.2018 / 15:55
-1

A maneira correta de lidar com isso é:

  • vá para o registro em que a política é
  • defina o valor para o que você quiser
  • e altere as permissões da chave de registro
  • somente Negar acesso de gravação a qualquer pessoa, exceto você
por 03.10.2018 / 17:01
-5

Você deve desativar o "bloqueio de tela" / "modo de suspensão" no painel de controle > opções de energia > alterar as configurações do plano. Ela clique no menu suspenso para "Colocar o computador para dormir" e selecione "nunca".

    
por 15.11.2013 / 04:17