Windows 7'de ilke tarafından uygulanan bir ekran kilidini nasıl önleyebilirim?


96

Kurumsal BOFH, ekran kilidi ayarını çok kısa bir gecikmeyle uygular. Sinir bozucu ve üretken.

Otomatik ekran kilidini önlemenin bir yolu var mı? Politika tarafından uygulanan ayarı geçersiz kılmanın bir yolu olmadığını, ancak kullanıcının etkinliğini taklit eden bir yazılım olduğunu varsayardım.

Sürekli bir fare tekerleği ayarlamadan önce soruyorum. (anla?)


1
Sadece "saçma bir şekilde kısa" ne merak ediyorum?
Carl

Orada olan kilitlenmesini ekran önleyecektir anahtar pres ve fare değişenler gibi geçici çözümler. Ama bunu yapmak istediğinden emin misin? BT güvenliğinin önlenmesi, şirket politikasına karşı daha muhtemeldir ve atılabilir bir suç olabilir.
Keltari

7
15 dakika. Tamam, o kadar kısa değil ... evde değilseniz, açık alanda değil ve sık sık da ikinci bir bilgisayarda çalışıyorsanız. Benim gibi, bu yüzden ekran kilidi iğrenç.
Gabriel R.

Bir yarı geçici çözüm, ekran koruyucuyu engellemek değil, ödemesiz süreyi birkaç saate ayarlamaktır. (Ekran koruyucunun başlangıcı ile bir parola girmeniz gereken zaman arasındaki süredir. Genellikle bu 5 saniyeye ayarlanır. Böylece ekran koruyucusu devre dışı bıraktığında fare ile hızlı bir şekilde sallayın. Ancak daha yüksek bir değerle şifreniz olmadan saatleriniz olabilir
Hennes

1
Senaryo benim için lütuf süresi değildir . Kurumsal politikamın ödemesiz dönemi de devre dışı bıraktığını farz ediyorum.
Dane Jacob Hampton,

Yanıtlar:


85

Ben idle.vbs başlıklı bir komut dosyası kullanıyorum:

Dim objResult

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

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

Her altı saniyede bir, klavyede hızlı bir şekilde geçiş yapar ve Windows'un birisinin klavye ile etkileşime girdiğine ve ekran kilidini engellediğine inanmasına neden olur. Bu, vanilyalı pencerelerde çalışır, onu kullanmak için geliştirme veya komut dosyası araçlarına ihtiyacınız yoktur, uzantı olarak .vbs içeren bir metin dosyası oluşturun ve çift tıklayın (veya başlangıç ​​öğelerinize yerleştirin).

Düzenleme: Bu betiği başlangıç ​​öğelerinize

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

Choclatey ( choco) CLI yükleyici hakkında daha fazla bilgi için lütfen bakınız:

https://chocolatey.org/


@JoshRivers bu betiği durdurmanın bir yolu, bilgisayarı yeniden başlatmak zorunda kalmadan da iyi olurdu.
DeeJayh

2
@DeeJayh Sadece Görev Yöneticisi'nde wscript.exe örneğini bulabilir ve öldürebilirsiniz. Genelde, o çalıştırılabilir dosyanın pek çok örneği yoktur. Muhtemelen sonlandırma için otomatik bir çözüm ( stackoverflow.com/a/22325745 ) yapabilir veya harici bir gerçeği izleyen Do While bölümüne kod koyarak. Komut dosyasının başlangıçta bir dosya oluşturmasını istediğiniz gibi, dosyanın Kalitede olduğunu kontrol edin. Böylece betiği sonlandırmak için dosyayı silebilirsiniz. (Ben asla bir şeyden vazgeçmedim, bu yüzden sadece senaryoyu çalıştırıyorum ve Task Manager ile nadiren öldürüyorum).
JoshRivers,

1
Windows 10'da, başlangıç ​​klasörünü bulmanın kolay bir yolu Başlat-> Çalıştır penceresini göstermektir (örn. WindowsKey + R) ve yazınız shell:startup. Daha fazla bilgi için bu siteye bakın thewindowsclub.com/startup-folder-in-windows-8
buzz3791

Komut dosyasını bulmak için görev yöneticinizdeki Microsoft Windows Tabanlı Komut Dosyası Sistemi'ni arayın. Veya bir İşlem Adı sütun ekleyin ve ardından wscript.exe dosyasını arayın.
JohnAndrews

Win10 Surface dizüstü bilgisayarda harika çalışıyor - fiziksel bir NumLock anahtarı bile yok!
Shahar

87

Windows Media Player hala yüklüyse, döngüdeki bir videoyu oynatabilir ve küçültebilirsiniz (örnek "Wildlife" videoları bunun için iyi sonuç verir). Varsayılan olarak, bir video oynatıldığı sürece, ekran kilitlenmez.


3
Teşekkür ederim! Bu en basit, en etkili çözümdür. (Yine de denemedim, bir süre önce şirketten ayrıldım ve Windows'tan uzak durmaya çalıştım.)
Gabriel R.

5
Bunun Windows XP'de video yerine MP3 dosyası kullanarak çalıştığını onaylıyorum.
Alaa Ali,

4
Parlak kesmek!

3
Bu, Windows Media Player'da tercih edenler için VLC kullanarak da çalışıyor
eko

4
Windows 7'de iyi çalışıyor. Güzel kesmek!
neves

16

Diğer bir seçenek ise ücretsiz Kafein programı. Ticari kullanım için de ücretsizdir. Programın ana sayfasından:

Bilgisayarınızın kilitlenmesi veya uykuya dalması ile ilgili problemleriniz varsa, kafein sizi uyanık tutacaktır. Her 59 saniyede bir tuşa basmak suretiyle çalışır, böylece makineniz hala klavyede çalıştığınızı düşünerek ekranı kilitlemez veya ekran koruyucuyu etkinleştirmez.

Kafein, her 59 saniyede bir F15 önemli olayını simüle ederek çalışır. Mevcut tüm tuş presleri arasında, F15 muhtemelen en az müdahalecidir (bu tuşla bir PC klavyesi hiç görmedim!) Ve en azından çalışmanıza müdahale etmesi muhtemeldir.

Bu kullanıma hazır çözüm, ne zaman etkinleştireceğinizi kontrol etmenizi ve devre dışı bırakmanızı sağlar:

Program simgesine çift tıklamak, simgenin temsil ettiği şey olan cezveyi boşaltır ve programı geçici olarak devre dışı bırakır. Tekrar çift tıklamak potu tekrar doldurur ve makinenizi uyanık tutar.


8
Bir Gov't çalışanının bilgisayarlarına Caffeine koyduğu ve Shift + F15 gibi bir şeyin nükleer
bombaları

Güzel, kolay "raftan" çözüm, teşekkürler. Gcc kadar komut satırı seçeneği var gibi gözüküyor, ancak hiçbirini kullanmama gerek yok!
Sam Watkins,

Aracı benim için harika çalışıyor! Çalışması için Visual C ++ 2008 Redistributable programını yüklemem gerekiyordu. microsoft.com/en-us/download/details.aspx?id=26368
Synck

7

Kullanılmayan bir tuşa sürekli olarak basmak için bir AutoIt betiği oluşturabilir (örneğin, num lock'u değiştirir, kaydırma kilidini değiştirir), bir dakika kadar uyur ve tekrarlarsınız. Alternatif olarak, klavyeyi çok kullanırsanız, fareyi herhangi bir yönde bir piksel kadar oynatmasını sağlayabilirsiniz.

Sürekli çalışmasını istemiyorsanız, bilgisayar bir süre hareketsiz kaldıktan sonra başlatmak için komut dosyasını zamanlanmış bir görev olarak da çalıştırabilirsiniz (erişiminiz varsa).

Ve bu, AutoIt sözdizimine girmek istemiyorsanız görünmez bir fare hareketi gerçekleştirmek için kullanılan çok basit bir komut dosyasıdır:

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

Bu komut dosyası, fare imlecini sol yönde bir piksel hareket ettirir ve ardından geri döndürür, ardından 9 dakika ( 540000milisaniye) uyur . Betik çalışırken, tepside AutoIt simgesini görebilirsiniz. Bu simgeye sağ tıklayıp ilgili seçeneği seçerek durdurabilirsiniz.

Bir senaryo yapmak AutoIt yüklemek için herhangi bir klasöre sağ tıklayın ve New> AutoIt v3 Script, bunun adı, seçim, bu yeni senaryom sağ tıklayın EditYukarıda verilen kodu yapıştırın ve kaydedin. .exeÖrneğin, Windows Zamanlayıcı'dan başlatmak için (içerik menüsünden) yine derleyebilirsiniz .


Teşekkürler, kontrol edeceğim, bir fare tekerleği kafes kurulumundan daha basit görünüyor :)
Gabriel R.

Bu AutoIt Scriptinin önceden derlenmiş hali burada symantec.com/connect/downloads/…
JJS

5

Bunu Visual Studio veya C # Express'te derleyin ve komut isteminden çalıştırın (veya çift tıklayın). .NET 4.0 veya üstünü gerektirir. Aradığın her şeyi yapıyor.

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;


        }
    }
}

Maalesef .... yukarıdaki iletide "Arıyor" ifadesinden sonraki her şey. kod ve derlenmelidir. Doğru biçimlendirmedi. Kod ilgilenenler için oldukça güzel bir pInvoke gösteriyor. BTW .... derlendikten sonra c: \ windows gibi bir yere koydum. Bu yolla eğer cmd komutundaysam ImWorkin yazabilirim ve gitmesi iyi olur :)
user205533 9:13

1
Cevabınızı, altındaki düzenle bağlantısını tıklayarak değiştirebilirsiniz .
Dennis,

lütfen ilk cevabınızı düzenleyin ve ardından bunu silin.
teylyn 09.03:

6
WTF "Bir dakika, birkaç değer hesaplıyorum!" kukla döngü?
KalEl

6
C # koduna cevaben, yazara kredi vermek genellikle alışılmış olanıdır. Bu benim olurum. Neredeyse iki yıl önce Overflow'a yığılmıştım.


2

Ben kullanmak ister kolay ve entegre seçenekleri ( ek yazılım bir powershell komut gibi), (teşekkürler https://dmitrysotnikov.wordpress.com/2009/06/29/prevent-desktop-lock-or-screensaver-with-powershell/ ) başarının anahtarı olarak “f15” i kullanır (kafeine teşekkür ederim. Gerçekten en az müdahale ediyor)

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

Bunu bir myScriptName.ps1 içine yerleştirin ve masaüstü kısayolu veya komut satırıyla başlatın: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop "C:\Users\myUser\Desktop\myScriptName.ps1"

GÜNCELLEME: Belki yöneticiden bir miktar değişiklik oldu, ama bu artık benim için işe yaramıyor Şimdi NBirnel'den bir autohotkey-script kullanmak zorundayım: https://github.com/nbirnel/nosleep - bu mükemmel , çünkü fareyi hareket ettirir (herhangi bir işi rahatsız etmeden)


Kodu çalıştırıyorum ancak aşağıdaki hatayı alıyorum. Lütfen tavsiye et 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

: @Sabrina belki, komut tam yolunu tanımlamak için öyle değil sadece "myScriptName.ps1" ama "\ yol myScriptName.ps1 \ olarak \ c" var
Eli

1

Benim durumumda sadece bu satır hile yaptı:

SendKeys.Send("{CAPSLOCK}");

Sadece Timer_Tickolaya koyun ve zamanlayıcı aralığını örn. 60000ms olarak ayarlayın.


1
Tamam, bu cevabı devam ettirmek için oldukça geç ama bir STACKOVerflow yorumunun ortasına bağırmamı istemiyorsanız, bir değil iki CAPSLOCK göndermeyi düşünün (neden bu yorumu yazmak birkaç dakika sürer)
Gian Paolo

@ GianPaolo haklısın. Ben de öyle yaptım. Açık olduğunu düşündüm ama belki de cevabı değiştirmeliyim.
user3540753 11:18


-1

Bunu ele almanın doğru yolu şudur:

  • politikanın bulunduğu yere kayıt defterine girmek
  • değeri istediğinize ayarlayın
  • ve kayıt defteri anahtarı izinlerini değiştirme
  • sadece kendin dışında kimseye yazma erişimini engelle

Yöneticiler ekran kilidi ayarlarını devre dışı bıraktığında, kayıt defterinin düzenlenmesi zaten devre dışıdır.
Gabriel R.

@GabrielR. Yönetici olarak, ACL'yi kayıt defteri anahtarlarında değiştirebilirsiniz. Sabrımı alırsam, kendi dizüstü bilgisayarını kilitleyen Microsoft grup politikasından kurtulmaktan bahsettiği Mark Russinovish'in konuşmasını bağlayacağım. Eğer bir yöneticiyseniz makineyi tam olarak kontrol edebilirsiniz. Muhtemelen kayıt defteri anahtarlarına sahip olmak, daha sonra kendinize tam kontrol vermek, daha sonra okuma erişimi dışındaki herhangi bir şeyi reddetmekle başlamak zorundadır.
Ian Boyd

-5

"Ekran kilidi" / "uyku modu" nu kontrol panelinden> güç seçenekleri> plan ayarlarını değiştir. Onu tıklattığınızda "Bilgisayarı uyku moduna geçirin" açılır ve "asla" seçeneğini seçin.


4
Etki alanı yöneticileri, Windows'ta ilke tarafından uygulanan bir ekran kilidine sahip olabilir.
Gabriel R.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.