Як я можу запобігти встановленому політикою блокування екрана в Windows 7?


96

Наш корпоративний BOFH накладає налаштування блокування екрана з смішно короткою затримкою. Це фрустративно і контрпродуктивно.

Чи існує спосіб запобігти автоматичне блокування екрана? Я б припустив, що немає способу змінити налаштовані на політику налаштування, але, можливо, є програмне забезпечення, яке імітує діяльність користувачів.

Просто запитую, перш ніж я встановив вічне колесо миші. (отримаєте?)


1
Просто цікаво, що таке "смішно короткий"?
Карл

Там є обхідні шляхи , такі як ключові притискних і рушіїв миші , які будуть перешкоджати екран від блокування. Але ви впевнені, що хочете це зробити? Обхід ІТ-безпеки більш ніж ймовірно суперечить політиці компанії, і може бути кримінальним злочином.
Келтарі

7
15 хвилин. Гаразд, це не так вже й швидко ... якщо ви не вдома, не на відкритому просторі, а також часто працюєте на другому комп’ютері. Як і я, тому блокування екрану є неприємним.
Габріель Р.

Один напівсправ - це не блокувати заставку, а встановити пільговий період на кілька годин. (Це час між запуском заставки і часом, необхідним для введення пароля. Зазвичай це встановлюється на 5 секунд. Тому швидке похитування мишкою, коли заставка просто забиває, відключає його. Однак з більшим значенням Ви можете мати години без пароля
Hennes

1
Пільговий період для мене не працює, в той час як сценарій . Я припускаю, що моя корпоративна політика також відключає пільговий період.
Дейн Джейкоб Хемптон

Відповіді:


85

Я використовую сценарій, який я називаю idle.vbs:

Dim objResult

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

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

Кожні шість секунд це швидко перемикає дімблок на клавіатурі, що змушує Windows вважати, що хтось взаємодіє з клавіатурою, запобігаючи блокуванню екрана. Це працює на ванільних вікнах, для його використання вам не потрібні інструменти розробки чи сценаріїв, просто створіть текстовий файл із розширенням .vbs та розкрийте його двічі та клацніть двічі (або помістіть його у своїх елементах запуску).

Редагувати: цей сценарій можна помістити в елементи запуску за допомогою

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

Для отримання додаткової інформації про chocoінсталятор CLI Choclatey ( ) див.

https://chocolatey.org/


@JoshRivers спосіб зупинити цей скрипт, не потребуючи перезавантаження комп'ютера, був би непоганим також.
DeeJayh

2
@DeeJayh Я думаю, що ви можете просто знайти екземпляр wscript.exe в диспетчері завдань і вбити його. Зазвичай не так багато примірників запущеного виконуваного файлу. Можливо, ви можете зробити автоматичне рішення для припинення ( stackoverflow.com/a/22325745 ) або ввівши код у розділі "Доки", який спостерігає за зовнішнім фактом. Як сценарій, наприклад, створити файл при запуску, а потім перевірте, чи існує файл у режимі Хоча. Таким чином, ви можете просто видалити файл, щоб сценарій припинився. (Я ніколи не виходжу з цієї речі, тому просто запускаю сценарій і дуже рідко вбиваю його разом із диспетчером завдань).
JoshRivers

1
У Windows 10 найпростіший спосіб знайти папку запуску - відобразити вікно Пуск-> Виконати (наприклад, WindowsKey + R), а потім ввести shell:startup. Перегляньте цей сайт для отримання додаткової інформації thewindowsclub.com/startup-folder-in-windows-8
buzz3791

Щоб знайти сценарій, шукайте хост сценаріїв на базі Microsoft Windows у своєму менеджері завдань. Або додайте стовпець Ім'я процесу та знайдіть wscript.exe.
JohnAndrews

Чудово працює на ноутбуці Win10 Surface - у нього навіть немає фізичної клавіші NumLock!
Шахар

87

Якщо програвач Windows Media Player все-таки встановлений, ви можете відтворювати відео в циклі і мінімізувати його (зразок відео "Wildlife" добре працює для цього). За замовчуванням, поки відтворюється відео, екран не блокується.


3
Дякую! Це найпростіше, найефективніше рішення. (Я не пробував цього, хоча я покинув компанію деякий час тому і намагаюся триматися подалі від Windows.)
Габріель Р.

5
Я підтверджую, що це працює в Windows XP, використовуючи MP3-файл, а не відео.
Алаа Алі

4
Блискучий злом!

3
Це також працює з використанням VLC для тих, хто вважає за краще його від Windows Media Player
ecoe

4
Добре працює в Windows 7. Приємний злом!
neves

16

Ще один варіант - безкоштовна програма з кофеїном . Він також безкоштовний для комерційного використання. На домашній сторінці програми:

Якщо у вас є проблеми з блокуванням ПК або сном, кофеїн не розбудить його. Це працює, імітуючи натискання клавіші раз на 59 секунд, тому машина вважає, що ви все ще працюєте за клавіатурою, тому не заблокуйте екран і не активуйте заставку.

Кофеїн спрацьовує, імітуючи подію F15 на ключі кожні 59 секунд. З усіх доступних натискань клавіш F15, мабуть, найменш нав'язливий (я ніколи не бачив клавіатури ПК з цією клавішею!), І, найменше, може заважати вашій роботі.

Це звичайне рішення також дозволяє контролювати, коли ввімкнути його та відключити:

Подвійне клацання піктограми програми спорожнює кавовий горщик, який є символом, і тимчасово вимикає програму. Подвійне клацання мишкою ще раз наповнює горщик, і він буде тримати ваш будинок неспаним.


8
Я чекаю дня, коли працівник уряду кладе кофеїн на свій комп’ютер, і просто так трапляється, що щось на зразок Shift + F15 запускає ядерні
ядра

Приємне легке рішення "з полиці", дякую. Здається, існує приблизно стільки ж параметрів командного рядка, скільки gcc, але мені не потрібно використовувати жоден з них!
Сем Уоткінс

Інструмент для мене чудово працює! Мені довелося встановити перерозподілюваний Visual C ++ 2008, щоб він працював. microsoft.com/en-us/download/details.aspx?id=26368
Synck

7

Ви можете створити сценарій AutoIt для того, щоб постійно натискати невикористану клавішу (наприклад, змусити її перемикати блокування чисел, заблокувати прокрутку), спати хвилину або близько того, і повторити. Крім того, якщо ви багато використовуєте клавіатуру, ви можете змусити її переміщати мишу пікселем або в будь-якому напрямку.

Якщо ви не хочете, щоб він постійно працював, ви також можете запустити скрипт як заплановане завдання (якщо у вас є доступ), яке потрібно запустити після того, як комп'ютер був неактивний деякий час.

І це дуже простий скрипт для виконання невидимого руху миші, якщо ви не хочете потрапляти в синтаксис AutoIt:

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

Цей сценарій переміщує курсор миші на один піксель у верхньому лівому напрямку та після цього повертає його назад, а потім спить 9 хвилин ( 540000мілісекунд). Коли сценарій працює, у лотку можна побачити значок AutoIt. Ви можете зупинити його клацанням правою кнопкою миші на цьому значку та обравши відповідний варіант.

Щоб створити скрипт, встановіть AutoIt, клацніть правою кнопкою миші в будь-якій папці та виберіть New> AutoIt v3 Script, назвіть його, натисніть правою кнопкою миші цей новий сценарій, виберіть Edit, вставте наведений вище код та збережіть. Ви навіть можете компілювати його .exe(знову ж таки, з контекстного меню), щоб запустити, наприклад, із планувальника Windows.


Дякую, я перевірю це, здається, простіше, ніж установка клітки колеса миші :)
Габріель Р.

Попередньо складена версія цього сценарію AutoIt тут symantec.com/connect/downloads/…
JJS

5

Скомпілюйте це в Visual Studio або C # Express і запустіть його з командного рядка (або двічі клацніть по ньому). Потрібна .NET 4.0 або вище. Це робить все, що ви шукаєте.

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? Kenneth.gore@gmail.com");
            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;


        }
    }
}

Вибачте .... у вищезгаданому дописі все після фрази "Шукаю". є кодом і повинен бути складений. Формато не правильно. Код демонструє досить цікавий pInvoke для зацікавлених. Btw .... після компіляції я просто поклав його на свій шлях десь як c: \ windows. Таким чином, якщо я надішлю запит на cmd, я можу набрати ImWorkin і мені добре піти :)
user205533

1
Ви можете змінити свою відповідь, натиснувши на неї посилання редагування .
Денніс

будь ласка, відредагуйте свою першу відповідь, а потім видаліть цю.
тейлін

6
WTF готовий до "Лиш мить, я обчислюю кілька значень!" манекенна петля?
KalEl

6
У відповідь на код c # розміщено його, як правило, прийнято дарувати автору кредит. Це трапляється я. Я опублікував це майже два роки тому на стеці Overflow, я вірю.


2

Мені подобається використовувати прості та інтегровані параметри ( без додаткового програмного забезпечення ), як скрипт powerhell (спасибі https://dmitrysotnikov.wordpress.com/2009/06/29/prevent-desktop-lock-or-screensaver-with-powershell/ ), який використовує "f15" як ключ до успіху (thx до кофеїну. Це справді найменш заважає)

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

Помістіть це у myScriptName.ps1 та запустіть його за допомогою ярлика робочого столу чи командного рядка: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop "C:\Users\myUser\Desktop\myScriptName.ps1"

ОНОВЛЕННЯ: Можливо, відбулася якась зміна з боку адміністратора, але це більше не працює для мене. Зараз мені потрібно використовувати сценарій автоматичної клавіші від NBirnel: https://github.com/nbirnel/nosleep - ця робота ідеальна , тому що це рухає мишкою (не відволікаючи жодної роботи)


Я запускаю код, але отримую наступну помилку. Будь ласка, порадьте c:\Powershell>powershell -nop myScriptName.ps1 myScriptName.ps1 : The term 'myScriptName.ps1' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again. At line:1 char:1 + myScriptName.ps1 + ~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (myScriptName.ps1:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException c:\Powershell>
Сабріна

@Sabrina може бути , ви повинні визначити повний шлях до вашого сценарієм, так що не просто «myScriptName.ps1» , а «C: \ шлях \ к \ myScriptName.ps1»
Eli

1

У моєму випадку саме цей один рядок зробив трюк:

SendKeys.Send("{CAPSLOCK}");

Просто помістіть його у Timer_Tickподії та встановіть інтервал таймера, наприклад, 60000 мс.


1
ОК, досить пізно відновити цю відповідь, але подумайте надсилати не один, а два КАПСЛОК, якщо ви не хочете, щоб я почав кричати в БОЛЬШОМУ СТАРКУ, коментуючи потік, не розуміючи, чому (це занадто багато хвилин, щоб написати цей коментар)
Джан Паоло

@GianPaolo ви праві. Це я і зробив. Я думав, що це зрозуміло, але, можливо, я повинен змінити відповідь.
користувач3540753


-1

Правильний спосіб впоратися з ним - це:

  • зайдіть в реєстр, де знаходиться поліс
  • встановіть значення на все, що завгодно
  • а також змінити права доступу до реєстру
  • лише заборонити доступ до будь-кого, окрім себе

Коли адміністратори відключають налаштування блокування екрана, редагування реєстру вже вимкнено.
Габріель Р.

@GabrielR. Як адміністратор ви можете змінити ACL в ключах реєстру. Якщо я отримаю терпіння, я зв’яжу розмову з Марком Руссіновішем, де він згадує про позбавлення від групової політики Microsoft, яка заблокувала власний ноутбук. Якщо ви адміністратор, ви маєте повний контроль над машиною. Це, мабуть, потрібно почати з отримання права власності на ключі реєстру, потім надання повного контролю, а потім заборонити комусь іншому, окрім доступу для читання.
Ян Бойд

-5

Вам слід відключити "блокування екрана" / "режим сну" на панелі керування> параметри живлення> змінити налаштування плану. Її натисніть на спадне меню для "Покладіть комп'ютер спати" та виберіть "ніколи".


4
Адміністратори домену можуть мати встановлене політикою блокування екрана в Windows.
Габріель Р.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.