Câu hỏi Làm cách nào để ngăn chặn khóa màn hình được thực thi theo chính sách trong Windows 7?


BOFH của công ty chúng tôi áp đặt cài đặt khóa màn hình với độ trễ ngắn đáng kể. Đó là bực bội và phản tác dụng.

Có cách nào để ngăn chặn khóa màn hình tự động không? Tôi cho rằng không có cách nào để ghi đè cài đặt được thực thi theo chính sách, nhưng có thể có một phần mềm bắt chước hoạt động của người dùng.

Chỉ cần hỏi trước khi tôi thiết lập một bánh xe chuột vĩnh viễn. (hiểu rồi?)


73
2017-08-30 08:32


gốc


Chỉ cần tò mò những gì "ridiculously ngắn" là? - Carl
Ở đó là cách giải quyết như máy ép chính và máy kéo chuột sẽ ngăn màn hình khóa. Nhưng bạn có chắc chắn muốn làm điều này không? Phá vỡ an ninh CNTT có nhiều khả năng chống lại chính sách của công ty, và có thể là một hành vi phạm tội có thể chữa được. - Keltari
15 phút. OK, nó không phải là ngắn ... trừ khi bạn đang ở nhà, không phải trong một không gian mở, và cũng thường làm việc trên một máy tính thứ hai. Giống như tôi, vì vậy khóa màn hình là đáng ghét. - Gabriel R.
Một giải pháp thay thế không phải là chặn trình bảo vệ màn hình, nhưng để đặt thời gian gia hạn thành vài giờ. (Đó là thời gian giữa lúc bắt đầu của trình bảo vệ màn hình và thời gian bạn cần nhập mật khẩu. Thông thường, điều này được đặt thành 5 giây. Vì vậy, lắc nhanh bằng chuột khi trình bảo vệ màn hình chỉ kích hoạt nó. bạn có thể có giờ mà không cần mật khẩu. - Hennes
Thời gian gia hạn không làm việc cho tôi, trong khi kịch bản làm. Tôi cho rằng chính sách công ty của tôi cũng vô hiệu hóa thời gian ân hạn. - Dane Jacob Hampton


Các câu trả lời:


Tôi sử dụng một tập lệnh idle.vbs tôi:

Dim objResult

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

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

Cứ sáu giây một lần, điều này nhanh chóng chuyển đổi numlock trên bàn phím, khiến Windows tin rằng ai đó đang tương tác với bàn phím, ngăn chặn khóa màn hình. Điều này chạy trên các cửa sổ vanilla, bạn không cần các công cụ phát triển hoặc kịch bản để sử dụng nó, chỉ cần tạo một tệp văn bản có đuôi .vbs làm phần mở rộng và bấm đúp vào nó (hoặc đặt nó trong các mục khởi động của bạn).

Chỉnh sửa: bạn có thể đặt tập lệnh này trong các mục khởi động của mình bằng

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

Để biết thêm thông tin về Choclatey (choco) Trình cài đặt CLI vui lòng xem:

https://chocolatey.org/


59
2017-11-05 18:54



@JoshRivers một cách để ngăn chặn kịch bản này, mà không cần phải khởi động lại máy tính, sẽ được tốt đẹp là tốt. - DeeJayh
@ DeeJayh Tôi nghĩ rằng bạn chỉ có thể tìm thấy trường hợp của wscript.exe trong Task Manager và giết nó. Thường không có nhiều trường hợp chạy được. Bạn có thể có thể làm cho một giải pháp tự động để chấm dứt (stackoverflow.com/a/22325745) hoặc bằng cách đặt mã trong phần Do While để theo dõi sự thật bên ngoài. Giống như tập lệnh tạo tệp khi khởi động, sau đó kiểm tra xem tệp có tồn tại trong Mặc dù không. Bằng cách đó bạn chỉ có thể xóa tệp để làm cho tập lệnh chấm dứt. (Tôi không bao giờ bỏ điều này, vì vậy tôi chỉ chạy kịch bản và rất hiếm khi giết nó với Task Manager). - JoshRivers
Trên Windows 10, một cách dễ dàng để định vị thư mục khởi động là hiển thị cửa sổ Start-> Run (ví dụ: WindowsKey + R) và sau đó nhập shell:startup. Xem trang web này để biết thêm thông tin thewindowsclub.com/startup-folder-in-windows-8 - buzz3791
Để tìm tập lệnh, hãy tìm Máy chủ tập lệnh dựa trên Microsoft Windows trong trình quản lý tác vụ của bạn. Hoặc thêm một cột Process Name và sau đó tìm wscript.exe. - JohnAndrews


Nếu Windows Media Player vẫn được cài đặt, bạn có thể phát video trên vòng lặp và thu nhỏ video (mẫu "Động vật hoang dã" video hoạt động tốt cho việc này). Theo mặc định, miễn là video đang phát, màn hình sẽ không khóa.


70
2018-04-10 17:22



Cảm ơn bạn! Đây là giải pháp đơn giản, hiệu quả nhất. (Tôi đã không thử nó mặc dù, tôi rời công ty một lúc trước và cố gắng tránh xa Windows.) - Gabriel R.
Tôi xác nhận rằng tính năng này hoạt động trên Windows XP sử dụng tệp MP3 thay vì video. - Alaa Ali
Brilliant hack!
Điều này cũng hoạt động bằng cách sử dụng VLC cho những người thích nó trên Windows Media Player - ecoe
Tuyệt vời hack. Tôi đã xây dựng một đoạn video nhỏ và các tập lệnh theo lô để bắt đầu quá trình này. Các tệp tại box.net và một bài đăng blog tại trang web cá nhân của tôi - Eric Cloninger


Tuy nhiên, một lựa chọn khác là phần mềm miễn phí Cafein chương trình. Nó là miễn phí cho sử dụng thương mại là tốt. Từ trang chủ của chương trình:

Nếu bạn có vấn đề với máy tính của bạn khóa hoặc đi ngủ, caffeine sẽ giữ cho nó tỉnh táo. Nó hoạt động bằng cách mô phỏng một lần nhấn phím một lần sau mỗi 59 giây, vì vậy máy của bạn cho rằng bạn vẫn đang làm việc ở bàn phím, vì vậy sẽ không khóa màn hình hoặc kích hoạt trình bảo vệ màn hình.

Caffeine hoạt động bằng cách mô phỏng một sự kiện phím F15 mỗi 59 giây. Trong số tất cả các phím bấm có sẵn, F15 có lẽ là ít xâm nhập nhất (tôi chưa bao giờ thấy bàn phím PC với phím đó!), Và ít có khả năng gây trở ngại cho công việc của bạn.

Giải pháp ngoài giá này cũng cho phép bạn kiểm soát thời điểm bật và tắt nó:

Nhấp đúp vào biểu tượng chương trình sẽ dọn sạch nồi cà phê, đó là những gì biểu tượng đại diện và tạm thời vô hiệu hóa chương trình. Nhấp đúp vào nó một lần nữa đổ đầy nồi, và sẽ giữ cho máy của bạn tỉnh táo.


9
2018-06-24 17:31



Tôi đang chờ một ngày khi một nhân viên của Gov't đặt Caffeine lên máy tính của họ và nó chỉ xảy ra khi có thứ gì đó như Shift + F15 ra mắt các vũ khí hạt nhân ... - kazoni
Nice dễ dàng "off the shelf" giải pháp, cảm ơn. Dường như có nhiều tùy chọn dòng lệnh như gcc, nhưng tôi không cần sử dụng bất kỳ tùy chọn nào trong số đó! - Sam Watkins


Bạn có thể tạo một AutoIt tập lệnh để liên tục nhấn một phím không sử dụng (ví dụ: làm cho nó chuyển đổi khóa num, khóa cuộn), ngủ trong một phút hoặc lâu hơn và lặp lại. Ngoài ra, nếu bạn sử dụng bàn phím rất nhiều, bạn có thể làm cho nó di chuyển chuột bằng pixel hoặc theo bất kỳ hướng nào.

Nếu bạn không muốn nó liên tục chạy, bạn cũng có thể khởi chạy tập lệnh như một tác vụ được lập biểu (nếu bạn có quyền truy cập) để khởi chạy sau khi máy tính không hoạt động trong một thời gian.

Và đây là một kịch bản rất đơn giản để thực hiện một di chuyển chuột vô hình, nếu bạn không muốn nhận được vào cú pháp AutoIt:

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

Kịch bản này di chuyển con trỏ chuột bằng một pixel theo hướng lên-trái và sau đó quay trở lại, sau đó ngủ trong 9 phút (540000 mili giây). Khi tập lệnh đang chạy, bạn có thể thấy biểu tượng AutoIt trong khay. Bạn có thể dừng nó bằng cách nhấp chuột phải vào biểu tượng này và chọn tùy chọn tương ứng.

Để tạo kịch bản, hãy cài đặt AutoIt, nhấp chuột phải vào bất kỳ thư mục nào và chọn New > AutoIt v3 Script, đặt tên cho nó, nhấp chuột phải vào tập lệnh mới này, chọn Edit, dán mã được cung cấp ở trên và lưu. Bạn thậm chí có thể biên dịch nó thành .exe (một lần nữa, từ trình đơn ngữ cảnh) để bắt đầu, ví dụ, từ Windows Scheduler.


7
2017-08-30 14:59



Cảm ơn, tôi sẽ kiểm tra xem nó ra, có vẻ đơn giản hơn một thiết lập lồng chuột bánh xe :) - Gabriel R.
Phiên bản biên dịch sẵn của Tập lệnh AutoIt này tại đây symantec.com/connect/downloads/… - JJS


Biên dịch điều này trong Visual Studio hoặc C # Express và chạy nó từ một dấu nhắc lệnh (hoặc nhấp đúp vào nó). Yêu cầu .NET 4.0 trở lên. Nó làm mọi thứ bạn đang tìm kiếm.

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;


        }
    }
}

5
2018-03-09 03:28



Xin lỗi .... trong bài viết trên tất cả mọi thứ sau cụm từ "Tìm kiếm". là mã và cần được biên dịch. Nó không định dạng đúng. Mã trình diễn một số pInvoke khá thú vị cho những người quan tâm. Btw .... sau khi biên dịch, tôi chỉ cần đặt nó trong con đường của tôi một nơi nào đó như c: \ windows. Bằng cách này nếu tôi đang ở một dấu nhắc cmd tôi có thể gõ ImWorkin và tôi tốt để đi :) - user205533
Bạn có thể sửa đổi câu trả lời của mình bằng cách nhấp vào chỉnh sửa bên dưới nó. - Dennis
vui lòng chỉnh sửa câu trả lời đầu tiên của bạn và sau đó xóa câu trả lời này. - teylyn
WTF là lên với "Chỉ một thời điểm, tôi tính toán một vài giá trị!" vòng lặp giả? - KalEl
Đáp lại mã c # đăng thường lệ của nó để cung cấp tín dụng cho tác giả. Điều đó xảy ra với tôi. Tôi đã đăng này gần hai năm trước đây trên stack Overflow tôi tin.


Có một ứng dụng Android được gọi là "Timeout Blocker" rung ở khoảng thời gian và bạn có thể đưa chuột vào đó. Nó nói không sử dụng nó tại nơi làm việc. https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&hl=vi


5
2018-06-06 21:36





Chuột Jiggler có thể là một lựa chọn: https://mousejiggler.codeplex.com/


1
2018-05-23 06:00



Điều này chỉ hoạt động tốt :) - sunil


Tôi thích sử dụng dễ dàng và tích hợp tùy chọn (không có phần mềm bổ sung), giống như tập lệnh PowerShell (cảm ơn https://dmitrysotnikov.wordpress.com/2009/06/29/prevent-desktop-lock-or-screensaver-with-powershell/) sử dụng "f15" làm chìa khóa thành công (thx đến caffeine. Nó thực sự ít can thiệp nhất)

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

Đặt điều này vào một myScriptName.ps1 và khởi động nó thông qua phím tắt trên máy tính hoặc dòng lệnh: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop "C:\Users\myUser\Desktop\myScriptName.ps1"


1
2018-01-16 14:55





Trong trường hợp của tôi chỉ có một dòng này đã làm các trick:

SendKeys.Send("{CAPSLOCK}");

Chỉ cần đặt nó vào Timer_Tick sự kiện và đặt khoảng thời gian hẹn giờ cho ví dụ: 60000 mili giây.


0
2017-12-30 08:17





Bạn nên tắt "khóa màn hình" / "chế độ ngủ" từ bảng điều khiển> tùy chọn nguồn> thay đổi cài đặt gói. Cô ấy nhấp vào trình đơn thả xuống "Đặt máy tính vào chế độ ngủ" và chọn "không bao giờ".


-6
2017-11-15 03:17



Quản trị viên tên miền có thể có khóa màn hình được chính sách thực thi trong Windows. - Gabriel R.