2011-08-30 08:32:07 +0000 2011-08-30 08:32:07 +0000
104
104

Jak mogę zapobiec wymuszonej przez politykę blokadzie ekranu w systemie Windows 7?

Nasz firmowy BOFH narzuca ustawienie blokady ekranu z absurdalnie krótkim opóźnieniem. Jest to frustrujące i nieproduktywne.

Czy istnieje sposób, aby zapobiec automatycznemu blokowaniu ekranu? Zakładam, że nie ma sposobu na obejście wymuszonego ustawienia, ale może istnieje oprogramowanie, które naśladuje aktywność użytkownika.

Pytanie przed ustawieniem wieczystego kółka myszy. (rozumiesz?)

Odpowiedzi (11)

92
92
92
2013-04-10 17:22:35 +0000

Jeśli Windows Media Player jest nadal zainstalowany, możesz odtworzyć film w pętli i zminimalizować go (przykładowe filmy “Wildlife” działają w tym celu dobrze). Domyślnie, tak długo jak film jest odtwarzany, ekran nie będzie blokowany.

89
89
89
2014-11-05 18:54:27 +0000

Używam skryptu o nazwie idle.vbs:

Dim objResult

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

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

Co sześć sekund, to szybko przełącza numlock na klawiaturze, powodując, że Windows uważa, że ktoś jest w interakcji z klawiaturą, zapobiegając blokady ekranu. To działa na okienkach waniliowych, nie potrzebujesz narzędzi programistycznych ani skryptowych, po prostu stwórz plik tekstowy z rozszerzeniem .vbs i kliknij go dwukrotnie (lub umieść go w swoich elementach startowych).

Edycja: możesz umieścić ten skrypt w swoich elementach startowych z

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

Aby uzyskać więcej informacji na temat instalatora Choclatey (choco) CLI zobacz: https://chocolatey.org/

18
18
18
2015-06-24 17:31:31 +0000

Kolejną opcją jest program Freeware Kofeina . Jest on również darmowy do użytku komercyjnego. Ze strony głównej programu:

Jeśli masz problemy z zablokowaniem komputera lub pójściem spać, kofeina utrzyma go w stanie czuwania. Działa poprzez symulację naciśnięcia klawisza co 59 sekund, dzięki czemu Twój komputer myśli, że nadal pracujesz na klawiaturze, więc nie zablokujesz ekranu ani nie aktywujesz wygaszacza ekranu.

Kofeina działa poprzez symulację naciśnięcia klawisza F15 co 59 sekund. Ze wszystkich dostępnych naciśnięć klawiszy, F15 jest prawdopodobnie najmniej inwazyjny (nigdy nie widziałem klawiatury PC z tym klawiszem!), i najmniej prawdopodobne jest, że będzie zakłócać Twoją pracę.

To gotowe rozwiązanie pozwala również kontrolować, kiedy go włączyć i wyłączyć:

Podwójne kliknięcie ikony programu opróżnia dzbanek do kawy, co jest tym, co reprezentuje ikona, i tymczasowo wyłącza program. Podwójne kliknięcie ponownie napełni dzbanek i sprawi, że urządzenie będzie czuwać.

7
7
7
2011-08-30 14:59:16 +0000

Możesz utworzyć skrypt AutoIt , aby albo stale naciskać nieużywany klawisz (np. przełączać blokadę numeryczną, blokadę przewijania), uśpić na minutę lub dłużej i powtórzyć. Alternatywnie, jeśli dużo używasz klawiatury, możesz sprawić, że będzie ona przesuwać mysz o piksel lub więcej w dowolnym kierunku.

Jeśli nie chcesz, aby skrypt działał nieprzerwanie, możesz również uruchomić skrypt jako zaplanowane zadanie (jeśli masz dostęp), aby uruchomić go po pewnym czasie nieaktywności komputera.

I jest to bardzo prosty skrypt do wykonania niewidocznego ruchu myszy, jeśli nie chcesz dostać się do składni AutoIt:

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

Skrypt ten przesuwa kursor myszy o jeden piksel w kierunku góra-lewo, a następnie zwraca go z powrotem, po czym śpi przez 9 minut (540000 milisekund). Kiedy skrypt jest uruchomiony, w zasobniku znajduje się ikona AutoIt. Możesz ją zatrzymać klikając prawym przyciskiem myszy na tę ikonę i wybierając odpowiednią opcję.

Aby utworzyć skrypt, zainstaluj AutoIt, kliknij prawym przyciskiem myszy w dowolnym folderze i wybierz New > AutoIt v3 Script, nazwij go, kliknij prawym przyciskiem myszy na ten nowy skrypt, wybierz Edit, wklej kod podany powyżej i zapisz. Możesz nawet skompilować go do .exe (ponownie, z menu kontekstowego), aby uruchomić go np. z Windows Scheduler.

5
5
5
2014-06-06 21:36:21 +0000

Istnieje android app o nazwie “Timeout Blocker”, który wibruje w odstępie czasu i można umieścić na nim mysz. Mówi ona jednak, aby nie używać go w pracy. https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&hl=en

5
5
5
2013-03-09 03:28:45 +0000

Skompiluj to w Visual Studio lub C# Express i uruchom to z polecenia (lub kliknij dwukrotnie). Wymaga .NET 4.0 lub wyższej. Robi wszystko, czego szukasz.

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;

        }
    }
}
2
2
2
2018-01-16 14:55:11 +0000

Lubię używać łatwych i integrowanych opcji ( brak dodatkowego oprogramowania ), jak skrypt powershell (dzięki https://dmitrysotnikov.wordpress.com/2009/06/29/prevent-desktop-lock-or-screensaver-with-powershell/ ), który używa “f15” jako klucza do sukcesu (thx do kofeiny. To rzeczywiście najmniej przeszkadza)

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

Włóż to do myScriptName.ps1 i uruchom go przez skrót desktopowy lub linię komend:C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop "C:\Users\myUser\Desktop\myScriptName.ps1"

UPDATE: Może była jakaś zmiana od administratora, ale to już dla mnie nie działa Teraz muszę użyć autohotkey-script z NBirnela: https://github.com/nbirnel/nosleep - ta praca doskonała , ponieważ porusza myszą (bez rozpraszania uwagi na jakąkolwiek pracę)

1
1
1
2014-12-30 08:17:36 +0000

W moim przypadku tylko ta jedna linia zrobiła sztuczkę:

SendKeys.Send("{CAPSLOCK}");

Wystarczy umieścić ją w zdarzeniu Timer_Tick i ustawić interwał czasowy na np. 60000ms.

1
1
1
2017-05-23 06:00:59 +0000

Mouse Jiggler może być opcją https://mousejiggler.codeplex.com/

-1
-1
-1
2018-10-03 15:01:08 +0000

Prawidłowy sposób postępowania to:

  • wejście do rejestru, w którym znajduje się polityka
  • ustawienie wartości na dowolną wartość
  • i zmiana uprawnień klucza rejestru
  • tylko Odmowa dostępu do zapisu każdemu oprócz siebie
-5
-5
-5
2013-11-15 03:17:15 +0000

Należy wyłączyć “blokadę ekranu”/“tryb uśpienia” z panelu sterowania > opcje zasilania > zmianę ustawień planu. Ona klikając w dół na “Uśpij komputer” i wybierając “nigdy”.