Bagaimana saya bisa mencegah kunci layar yang diberlakukan kebijakan di Windows 7?

96

BOFH perusahaan kami menerapkan pengaturan kunci layar dengan penundaan yang sangat singkat. Ini membuat frustrasi dan kontraproduktif.

Apakah ada cara untuk mencegah kunci layar otomatis? Saya berasumsi bahwa tidak ada cara untuk menimpa pengaturan yang diberlakukan kebijakan, tapi mungkin ada perangkat lunak yang meniru aktivitas pengguna.

Hanya bertanya sebelum saya membuat roda mouse abadi. (mendapatkan?)

Gabriel R.
sumber
1
Hanya ingin tahu apa yang "sangat pendek" itu?
Carl
Ada beberapa solusi seperti penekan tombol dan penggerak mouse yang akan mencegah penguncian layar. Tapi apakah Anda yakin ingin melakukan ini? Mengurangi keamanan TI lebih dari mungkin terhadap kebijakan perusahaan, dan bisa menjadi pelanggaran yang bisa dipadamkan.
Keltari
7
15 menit. OK, tidak sesingkat itu ... kecuali jika Anda berada di rumah, tidak di ruang terbuka, dan juga sering menggunakan komputer kedua. Seperti saya, jadi kunci layarnya menjengkelkan.
Gabriel R.
Satu solusi semi bukan untuk memblokir screensaver, tetapi untuk mengatur masa tenggang menjadi beberapa jam. (Itu adalah waktu antara awal screensaver dan waktu Anda perlu memasukkan kata sandi. Biasanya ini diatur ke 5 detik. Jadi goyangan cepat dengan mouse ketika screensaver hanya menendang menonaktifkannya. Namun dengan nilai yang lebih tinggi Anda dapat memiliki waktu berjam-jam tanpa kata sandi
Hennes
1
Masa tenggang tidak berhasil bagi saya, sedangkan naskahnya tidak. Saya berasumsi bahwa kebijakan perusahaan saya juga menonaktifkan masa tenggang.
Dane Jacob Hampton

Jawaban:

85

Saya menggunakan script saya judul idle.vbs:

Dim objResult

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

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

Setiap enam detik, ini dengan cepat beralih numlock pada keyboard, menyebabkan Windows percaya bahwa seseorang berinteraksi dengan keyboard, mencegah kunci layar. Ini berjalan pada windows vanilla, Anda tidak memerlukan alat pengembangan atau skrip untuk menggunakannya, cukup buat file teks dengan .vbs sebagai ekstensi dan klik dua kali (atau letakkan di item startup Anda).

Sunting: Anda dapat menempatkan skrip ini di item startup Anda

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

Untuk informasi lebih lanjut tentang chocopemasang CLI Choclatey ( ) silakan lihat:

https://chocolatey.org/

JoshRivers
sumber
@JoshRivers memberikan cara untuk menghentikan skrip ini, tanpa harus me-restart komputer, akan menyenangkan juga.
DeeJayh
2
@ DavidJayh Saya pikir Anda bisa menemukan contoh wscript.exe di Task Manager dan membunuhnya. Biasanya tidak ada banyak contoh menjalankan yang dapat dieksekusi. Anda mungkin dapat membuat solusi otomatis untuk penghentian ( stackoverflow.com/a/22325745 ) atau dengan meletakkan kode di bagian Do While yang mengawasi fakta eksternal. Seperti memiliki skrip membuat file pada startup, lalu periksa apakah file tersebut ada di While. Dengan begitu Anda bisa menghapus file untuk membuat skrip berakhir. (Namun saya tidak pernah berhenti, jadi saya menjalankan skrip dan sangat jarang membunuhnya dengan Task Manager).
JoshRivers
1
Pada Windows 10, cara mudah untuk menemukan folder startup adalah menampilkan jendela Start-> Run (misalnya WindowsKey + R) dan kemudian ketik shell:startup. Lihat situs ini untuk info lebih lanjut thewindowsclub.com/startup-folder-in-windows-8
buzz3791
Untuk menemukan skrip, cari Host Script Berbasis Microsoft Windows di task manager Anda. Atau tambahkan kolom Nama Proses dan kemudian cari wscript.exe.
JohnAndrews
Bekerja sangat baik pada laptop Win10 Surface - yang bahkan tidak memiliki kunci NumLock fisik!
Shahar
87

Jika Windows Media Player masih diinstal, Anda dapat memutar video di loop dan menguranginya (contoh video "Wildlife" berfungsi dengan baik untuk ini). Secara default, selama video diputar, layar tidak akan terkunci.

omaha_brad
sumber
3
Terima kasih! Ini adalah solusi paling sederhana dan paling efektif. (Saya tidak mencobanya, saya meninggalkan perusahaan beberapa waktu lalu dan mencoba menjauh dari Windows.)
Gabriel R.
5
Saya mengonfirmasi bahwa ini berfungsi pada Windows XP menggunakan file MP3 alih-alih video.
Alaa Ali
4
Retas yang brilian!
3
Ini juga berfungsi menggunakan VLC bagi mereka yang lebih suka menggunakan Windows Media Player
ecoe
4
Berfungsi dengan baik di Windows 7. Hack bagus!
neves
16

Namun pilihan lain adalah program Kafein freeware . Ini gratis untuk penggunaan komersial juga. Dari beranda program:

Jika Anda memiliki masalah dengan penguncian PC atau tidur, kafein akan tetap terjaga. Ini bekerja dengan mensimulasikan penekanan tombol sekali setiap 59 detik, sehingga mesin Anda berpikir Anda masih bekerja di keyboard, jadi tidak akan mengunci layar atau mengaktifkan screensaver.

Caffeine bekerja dengan mensimulasikan peristiwa kunci F15 setiap 59 detik. Dari semua tombol yang tersedia, F15 mungkin adalah yang paling tidak mengganggu (saya belum pernah melihat keyboard PC dengan tombol itu!), Dan paling tidak mungkin mengganggu pekerjaan Anda.

Solusi off-the-shelf ini juga memungkinkan Anda untuk mengontrol kapan mengaktifkannya dan menonaktifkannya:

Mengklik dua kali ikon program mengosongkan teko kopi, yang mewakili ikon tersebut, dan untuk sementara menonaktifkan program. Mengklik dua kali lagi akan mengisi ulang pot, dan akan membuat mesin Anda tetap terjaga.

Ilya Kurnosov
sumber
8
Saya sedang menunggu hari ketika seorang pegawai pemerintah meletakkan Kafein di komputer mereka dan kebetulan saja sesuatu seperti Shift + F15 meluncurkan nuklir ...
kazoni
Bagus solusi "off the rak", terima kasih. Tampaknya memiliki opsi baris perintah sebanyak gcc, tapi saya tidak perlu menggunakan salah satu dari mereka!
Sam Watkins
Alat ini bekerja bagus untuk saya! Saya harus menginstal Visual C ++ 2008 Redistributable untuk membuatnya berfungsi. microsoft.com/en-us/download/details.aspx?id=26368
Synck
7

Anda dapat membuat skrip AutoIt untuk secara terus-menerus menekan tombol yang tidak digunakan (mis. Membuatnya untuk mengaktifkan kunci num, kunci gulir), tidur selama sekitar satu menit, dan ulangi. Atau, jika Anda sering menggunakan keyboard, Anda bisa membuatnya menggerakkan mouse dengan piksel kurang lebih ke arah mana pun.

Jika Anda tidak ingin itu terus berjalan, Anda juga dapat meluncurkan skrip sebagai tugas yang dijadwalkan (jika Anda memiliki akses) untuk memulai setelah komputer tidak aktif selama beberapa waktu.

Dan ini adalah skrip yang sangat sederhana untuk melakukan gerakan mouse yang tidak terlihat, jika Anda tidak ingin masuk ke sintaks AutoIt:

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

Skrip ini menggerakkan kursor mouse dengan satu piksel ke arah kiri dan setelah itu mengembalikannya, lalu tidur selama 9 menit ( 540000milidetik). Saat skrip berjalan, Anda dapat melihat ikon AutoIt di baki. Anda dapat menghentikannya dengan mengklik kanan ikon ini dan memilih opsi yang sesuai.

Untuk membuat skrip, instal AutoIt, klik kanan di sembarang folder dan pilih New> AutoIt v3 Script, beri nama, klik kanan skrip baru ini, pilih Edit, rekatkan kode yang disediakan di atas dan simpan. Anda bahkan dapat mengompilasinya ke .exe(lagi, dari menu konteks) untuk memulai, misalnya, dari Penjadwal Windows.

Penerobosan
sumber
Terima kasih, saya akan memeriksanya, tampaknya lebih sederhana daripada pengaturan sangkar roda mouse :)
Gabriel R.
Versi yang sudah dikompilasi dari Script AutoIt ini di sini symantec.com/connect/downloads/…
JJS
5

Kompilasi ini di Visual Studio atau C # Express dan jalankan dari prompt perintah (atau klik dua kali). Membutuhkan .NET 4.0 atau lebih tinggi. Itu melakukan semua yang Anda cari.

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;


        }
    }
}
pengguna205533
sumber
Maaf .... di posting di atas semuanya setelah frasa "Mencari." adalah kode dan harus dikompilasi. Itu tidak memformat dengan benar. Kode menunjukkan beberapa pInvoke yang cukup keren untuk mereka yang tertarik. Btw .... setelah dikompilasi, saya letakkan saja di jalur saya di suatu tempat seperti c: \ windows. Dengan cara ini jika saya di prompt cmd saya bisa mengetik ImWorkin dan saya baik-baik saja :)
user205533
1
Anda dapat mengubah jawaban Anda dengan mengklik tautan edit di bawahnya.
Dennis
harap edit jawaban pertama Anda dan kemudian hapus yang ini.
teylyn
6
WTF sudah siap dengan "Sebentar, saya menghitung beberapa nilai!" lingkaran dummy?
KalEl
6
Menanggapi kode c # diposting biasanya biasanya untuk memberikan kredit kepada penulis. Itu kebetulan saya. Saya memposting ini hampir dua tahun yang lalu di stack Overflow, saya percaya.
2

Saya suka menggunakan opsi yang mudah dan terintegrasi ( tidak ada perangkat lunak tambahan ), seperti skrip powershell (terima kasih https://dmitrysotnikov.wordpress.com/2009/06/29/prevent-desktop-lock-or-screensaver-with-powershell/ ) yang menggunakan "f15" sebagai kunci kesuksesan (thx to caffeine. Ini memang paling tidak mengganggu)

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

Masukkan ini ke dalam myScriptName.ps1 dan mulai melalui pintasan desktop atau commandline: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop "C:\Users\myUser\Desktop\myScriptName.ps1"

UPDATE: Mungkin ada beberapa perubahan dari administrator, tetapi ini tidak berfungsi lagi untuk saya. Sekarang saya harus menggunakan skrip autohotkey dari NBirnel: https://github.com/nbirnel/nosleep - karya ini sempurna , karena itu menggerakkan mouse (tanpa mengganggu pekerjaan apa pun)

eli
sumber
Saya menjalankan kode tetapi mendapatkan kesalahan berikut. Mohon saran 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 mungkin Anda harus menentukan path lengkap ke skrip Anda, jadi bukan hanya "myScriptName.ps1" tetapi "c: \ path \ to \ myScriptName.ps1"
eli
1

Dalam kasus saya, hanya satu baris ini yang berhasil:

SendKeys.Send("{CAPSLOCK}");

Timer_TickMasukkan saja ke dalam event dan atur interval timer ke misalnya 60000ms.

pengguna3540753
sumber
1
ok, sudah agak terlambat untuk melanjutkan jawaban ini tetapi pertimbangkan untuk mengirim bukan hanya satu tapi dua CAPSLOCK jika Anda tidak ingin saya tetap berteriak di tengah-tengah STACKOVerflow komentar tanpa memahami mengapa (butuh beberapa menit untuk menulis komentar ini)
Gian Paolo
@ Gianpaolo kamu benar. Inilah yang saya lakukan. Saya pikir sudah jelas tapi mungkin saya harus memodifikasi jawabannya.
user3540753
-1

Cara yang benar untuk menanganinya adalah dengan:

  • masuk ke registri di mana kebijakan itu
  • atur nilainya menjadi apa pun yang Anda inginkan
  • dan mengubah izin kunci registri
  • hanya Tolak akses tulis kepada siapa pun kecuali Anda sendiri
Ian Boyd
sumber
Ketika admin menonaktifkan pengaturan kunci layar, mengedit registri sudah dinonaktifkan.
Gabriel R.
@GabrielR. Sebagai administrator Anda dapat mengubah ACL pada kunci registri. Jika saya mendapatkan kesabaran saya akan menghubungkan pembicaraan dari Mark Russinovish di mana ia menyebutkan menyingkirkan kebijakan grup Microsoft yang mengunci laptopnya sendiri. Jika Anda seorang administrator, Anda memiliki kendali penuh atas mesin. Ini mungkin harus dimulai dengan mengambil kepemilikan kunci registri, kemudian memberikan diri Anda kontrol penuh, kemudian menolak orang lain apa pun kecuali akses baca.
Ian Boyd
-5

Anda harus menonaktifkan "kunci layar" / "mode tidur" dari panel kontrol> opsi daya> ubah pengaturan paket. Dalam klik drop down untuk "Letakkan komputer untuk tidur" dan pilih "tidak pernah".

RAJESH BANSAL
sumber
4
Admin domain dapat memiliki kunci layar yang diberlakukan kebijakan di Windows.
Gabriel R.