Windows 7에서 정책 적용 화면 잠금을 방지하려면 어떻게해야합니까?


96

우리 회사 BOFH는 엄청나게 짧은 지연으로 화면 잠금 설정을 적용합니다. 실망스럽고 비생산적입니다.

자동 화면 잠금을 방지하는 방법이 있습니까? 정책 적용 설정을 무시하는 방법은 없지만 사용자 활동을 모방하는 소프트웨어가있을 수 있습니다.

영구 마우스 휠을 설정하기 전에 묻습니다. (알 겠어요?)


1
"엄청나게 짧은"것이 무엇인지 궁금하십니까?
Carl

있는 잠금에서 화면을 방지 키 프레셔와 마우스 이삿짐 같은 해결 방법. 그러나 당신은 이것을 정말로 하시겠습니까? IT 보안 우회는 회사 정책에 위배 될 가능성이 높으며 화재의 위험이 있습니다.
Keltari

7
15 분. 네, 집에 있지 않고 열린 공간이 아니라 종종 두 번째 컴퓨터에서 작업하지 않는 한 짧지 않습니다. 나처럼 화면 잠금은 눈에 띄지 않습니다.
Gabriel R.

반자동 해결 방법 중 하나는 화면 보호기를 차단하는 것이 아니라 유예 기간을 몇 시간으로 설정하는 것입니다. (이는 화면 보호기 시작과 암호 입력 시간 사이의 시간입니다. 일반적으로 5 초로 설정되어 있으므로 화면 보호기가 찰칵 소리가 나면 마우스를 빠르게 흔들면 비활성화됩니다. 비밀번호없이 몇 시간을 보낼 수 있습니다
Hennes

1
유예 기간 은 나를 위해 작동하지 않지만 스크립트 는 작동합니다. 회사 정책에 따라 유예 기간이 비활성화되었다고 가정합니다.
Dane Jacob Hampton

답변:


85

나는 idle.vbs라는 제목의 스크립트를 사용합니다.

Dim objResult

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

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

6 초마다 키보드에서 numlock을 빠르게 토글하여 Windows가 누군가가 키보드와 상호 작용하여 화면 잠금을 방지한다고 믿습니다. 이것은 바닐라 창에서 실행되며이를 사용하기 위해 개발 또는 스크립팅 도구가 필요하지 않습니다. 확장자가 .vbs 인 텍스트 파일을 만든 다음 두 번 클릭하거나 시작 항목에 배치하십시오.

편집 :이 스크립트를 시작 항목에 넣을 수 있습니다.

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

Choclatey ( choco) CLI 설치 프로그램 에 대한 자세한 내용은 다음을 참조하십시오.

https://chocolatey.org/


@JoshRivers는 컴퓨터를 다시 시작하지 않고도이 스크립트를 중지 할 수있는 좋은 방법입니다.
DeeJayh

2
@DeeJayh 작업 관리자에서 wscript.exe 인스턴스를 찾아서 죽일 수 있다고 생각합니다. 일반적으로 해당 실행 파일의 인스턴스가 많지 않습니다. 종료를위한 자동화 된 솔루션 ( stackoverflow.com/a/22325745 )을 작성하거나 외부 사실을 감시하는 Do While 섹션에 코드를 넣을 수 있습니다. 스크립트를 시작할 때 파일을 만든 다음 파일이 While에 있는지 확인하십시오. 이렇게하면 파일을 삭제하여 스크립트를 종료 할 수 있습니다. (그러나 나는 그 일을 끝내지 않으므로 스크립트를 실행하고 작업 관리자로 거의 죽이지 않습니다).
JoshRivers

1
Windows 10에서 시작 폴더를 찾는 쉬운 방법은 시작-> 실행 창 (예 : WindowsKey + R)을 표시 한 다음을 입력하는 것 shell:startup입니다. 자세한 내용은이 사이트를 참조하십시오 thewindowsclub.com/startup-folder-in-windows-8
buzz3791

스크립트를 찾으려면 작업 관리자에서 Microsoft Windows 기반 스크립트 호스트를 찾으십시오. 또는 프로세스 이름 열을 추가 한 다음 wscript.exe를 찾으십시오.
JohnAndrews

실제 NumLock 키가없는 Win10 Surface 랩톱에서도 잘 작동합니다!
Shahar

87

Windows Media Player가 여전히 설치되어 있으면 비디오를 루프에서 재생하고 최소화 할 수 있습니다 (샘플 "Wildlife"비디오가 제대로 작동 함). 기본적으로 비디오가 재생되는 동안 화면은 잠기지 않습니다.


3
감사합니다! 가장 간단하고 효과적인 솔루션입니다. (나는 그것을 시도하지 않았지만, 얼마 전에 회사를 떠났고 Windows를 피하려고 노력했습니다.)
Gabriel R.

5
비디오 대신 MP3 파일을 사용하여 Windows XP에서 작동 함을 확인합니다.
Alaa Ali

4
화려한 해킹!

3
이것은 또한 Windows Media Player보다 선호하는 사람들을 위해 VLC를 사용하여 작동합니다.
ecoe

4
Windows 7에서 잘 작동합니다. 멋진 해킹!
네 베스

16

또 다른 옵션은 프리웨어 카페인 프로그램입니다. 상업용으로도 무료입니다. 프로그램 홈페이지에서 :

PC 잠금 또는 잠자기에 문제가있는 경우 카페인은 계속 깨어 있습니다. 59 초마다 한 번씩 키 누름을 시뮬레이션하여 작동하므로 컴퓨터는 여전히 키보드에서 작업하고 있다고 생각하므로 화면을 잠 그거나 화면 보호기를 활성화하지 않습니다.

카페인은 59 초마다 F15 키업 이벤트를 시뮬레이션하여 작동합니다. 사용 가능한 모든 키 누름 중 F15는 아마도 가장 방해가되지 않으며 (그 키로 PC 키보드를 본 적이 없습니다!) 작업에 방해가되지 않습니다.

이 기성품 솔루션을 사용하면 언제 활성화하고 비활성화할지 제어 할 수 있습니다.

프로그램 아이콘을 두 번 클릭하면 아이콘이 나타내는 커피 포트가 비워지고 프로그램이 일시적으로 비활성화됩니다. 다시 더블 클릭하면 포트가 채워지고 기계가 깨어납니다.


8
저는 Gov't 직원이 자신의 컴퓨터에 카페인을 넣는 날을 기다리고 있습니다. Shift + F15와 같은 것이 핵무기를 발사 할
때에도 마찬가지입니다

"쉽고 사용하기 쉬운"솔루션입니다. 감사합니다. gcc만큼 많은 명령 행 옵션이있는 것 같지만 그중 하나를 사용할 필요는 없습니다!
Sam Watkins

이 도구는 저에게 효과적입니다! Visual C ++ 2008 재배포 가능 패키지를 설치해야 작동합니다. microsoft.com/ko-kr/download/details.aspx?id=26368
Synck

7

AutoIt 스크립트를 생성하여 사용하지 않는 키를 계속 누르고 (예 : num lock 전환, 스크롤 잠금) 1 분간 잠자기 및 반복 할 수 있습니다. 또는 키보드를 많이 사용하는 경우 마우스를 아무 방향으로나 픽셀만큼 움직일 수 있습니다.

계속 실행하지 않으려면 일정 시간 동안 컴퓨터를 사용하지 않으면 스크립트를 예약 된 작업 (액세스 권한이있는 경우)으로 시작하면됩니다.

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 스케줄러에서 시작할 수도 있습니다.


감사합니다, 확인하겠습니다, 마우스 휠 케이지 설정보다 간단 해 보입니다 :)
Gabriel R.

이 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
아래 의 편집 링크 를 클릭하여 답변을 수정할 수 있습니다 .
Dennis

첫 번째 답변을 수정 한 후이 답변을 삭제하십시오.
teylyn

6
WTF는 "단지, 몇 가지 값을 계산하고 있습니다!" 더미 루프?
KalEl

6
c # 코드에 대한 응답으로 저자에게 크레딧을 제공하는 것이 일반적입니다. 그게 나야. 나는 거의 2 년 전에 이것을 스택 오버플로에 믿었다.


2

내가 사용하려면 간단 하고 통합 된 옵션 ( 추가 소프트웨어 PowerShell 스크립트 등) (감사 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에서 autohotkey-script를 사용해야합니다 : 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

@Sabrina 어쩌면 "myScriptName.ps1"뿐만 아니라 "c : \ path \ to \ myScriptName.ps1"뿐만 아니라 스크립트의 전체 경로를 정의해야 할 수도 있습니다.
eli

1

내 경우에는이 한 줄만 트릭을 수행했습니다.

SendKeys.Send("{CAPSLOCK}");

Timer_Tick이벤트에 넣고 타이머 간격을 60000ms로 설정하십시오.


1
좋아,이 답변을 재개하는 것은 꽤 늦었지만, 이유를 이해하지 않고 STACKOVerflow 의견의 중간에 소리를 지르고 싶지 않다면 하나 또는 두 개의 CAPSLOCK을 보내는 것을 고려하십시오 (이 의견을 작성하는 데 몇 분이 걸렸습니다)
지안 파올로

@GianPaolo 당신이 맞아요. 이것이 내가 한 일입니다. 나는 그것이 분명하다고 생각했지만 대답을 수정해야 할 수도 있습니다.
user3540753


-1

그것을 처리하는 올바른 방법은 다음과 같습니다.

  • 정책이있는 레지스트리로 이동
  • 원하는대로 값을 설정하십시오
  • 레지스트리 키 권한을 변경하십시오.
  • 본인 이외의 사람 에게만 쓰기 권한 거부

관리자가 화면 잠금 설정을 비활성화하면 레지스트리 편집이 이미 비활성화되어 있습니다.
Gabriel R.

@GabrielR. 관리자는 레지스트리 키에서 ACL을 변경할 수 있습니다. 인내심을 가지면 Mark Russinovish의 대화를 연결하여 자신의 랩톱을 잠근 Microsoft 그룹 정책을 제거하는 것에 대해 언급합니다. 관리자 인 경우 컴퓨터를 완전히 제어 할 수 있습니다. 레지스트리 키를 소유 한 다음 자신에게 모든 권한을 부여한 다음 읽기 권한 이외의 다른 사람은 거부하는 것으로 시작해야합니다.
Ian Boyd

-5

제어판> 전원 옵션> 계획 설정 변경에서 "화면 잠금"/ "절전 모드"를 비활성화해야합니다. 그녀는 "컴퓨터를 절전 모드로 전환"드롭 다운을 클릭하고 "없음"을 선택합니다.


4
도메인 관리자는 Windows에서 정책 적용 화면 잠금을 가질 수 있습니다.
Gabriel R.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.