web-dev-qa-db-ja.com

Windows 7でポリシーによるスクリーンロックを防ぐ方法を教えてください。

私たちの会社のBOFHは途方もなく短い遅れでスクリーンロック設定を課しています。それはイライラし、逆効果です。

自動画面ロックを防ぐ方法はありますか?ポリシーで強制された設定を上書きする方法はないと思いますが、ユーザーの操作を模倣するソフトウェアがあるかもしれません。

永久マウスホイールを設定する前にたずねます。 (それを得る?)

92
Gabriel R.

私は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が誰かがキーボードを操作していると信じ、画面のロックを防ぎます。これはVanillaウィンドウ上で動作します。それを使用するための開発ツールやスクリプトツールは必要ありません。拡張子として.vbsを使用してテキストファイルを作成し、それをダブルクリック(またはスタートアップアイテムに配置)するだけです。

編集:あなたはあなたのスタートアップ項目にこのスクリプトを置くことができます

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

Choclatey(choco)CLIインストーラーの詳細については、以下を参照してください。

https://chocolatey.org/

80
JoshRivers

それでもWindows Media Playerがインストールされている場合は、ビデオを繰り返し再生して最小化することができます(サンプルの "Wildlife"ビデオは問題なく動作します)。デフォルトでは、ビデオが再生されている限り、画面はロックされません。

83
omaha_brad

さらに別の選択肢は、フリーウェア カフェイン プログラムです。商用利用も無料です。プログラムのホームページから:

PCのロックや眠りに問題がある場合、カフェインはそれを起こし続けます。これは59秒に1回キーを押す操作をシミュレートすることで機能するので、あなたのマシンはまだキーボードで作業していると考えているので、スクリーンをロックしたりスクリーンセーバーを起動したりしないでください。

カフェインは、F15キーアップイベントを59秒ごとにシミュレートすることによって機能します。利用可能なすべてのキー押下のうち、F15はおそらく最も邪魔にならず(そのキーを持つPCキーボードを見たことがない!)、そしてあなたの作業を妨げる可能性は最も低いです。

この既製のソリューションでは、いつ有効にして無効にするかを制御することもできます。

プログラムアイコンをダブルクリックすると、コーヒーポットが空になります。これはアイコンが表すもので、プログラムを一時的に無効にします。もう一度ダブルクリックするとポットが補充され、マシンが起動したままになります。

14
Ilya Kurnosov

AutoIt スクリプトを作成して、未使用のキーを連続して押す(例:numロック、スクロールロックに切り替える)、1分程度スリープするなどのいずれかを実行できます。繰り返します。あるいは、キーボードを頻繁に使用する場合は、マウスを任意の方向に1ピクセル程度移動させることもできます。

スクリプトを継続的に実行したくない場合は、コンピュータにしばらくの間非アクティブになった後に起動するスケジュールタスクとしてスクリプトを起動することもできます。

AutoItの構文を使いたくない場合は、これは目に見えないマウス移動を実行するための非常に単純なスクリプトです。

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

このスクリプトは、マウスカーソルを左上方向に1ピクセル移動し、その後元に戻してから9分間スリープします(540000ミリ秒)。スクリプトが実行されていると、トレイにAutoItアイコンが表示されます。このアイコンを右クリックして対応するオプションを選択することで停止できます。

スクリプトを作成するには、AutoItをインストールし、任意のフォルダを右クリックしてNew> AutoIt v3 Scriptを選択し、名前を付けてこの新しいスクリプトを右クリックし、Editを選択して上記のコードを貼り付けて保存します。 Windowsスケジューラなどから起動するには、(これもコンテキストメニューから).exeにコンパイルすることもできます。

7
Breakthrough

これを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? [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;


        }
    }
}
5
user205533

間隔を空けて振動する「タイムアウトブロッカー」と呼ばれるAndroidアプリがあり、あなたはそれにあなたのマウスを置くことができます。それは仕事でそれを使用しないことを言います。 https://play.google.com/store/apps/details?id=com.isomerprogramming.application.timeoutblocker&hl=ja

5
Matt

PowerShellスクリプトのように、簡単なおよび統合されたオプション(追加ソフトウェアなし)を使用するのが好きです(ありがとう) https://dmitrysotnikov.wordpress.com/2009/06/29/prevent-desktop-lock-or-screensaver-with-powershell/ )には、成功への鍵(カフェインへの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スクリプトを使わなければなりません: https: //github.com/nbirnel/nosleep - この作品は完璧です、(作品の気をそらすことなく)マウスを動かすので

2
eli

私の場合は、この1行だけでうまくいきました。

SendKeys.Send("{CAPSLOCK}");

それをTimer_Tickイベントに入れて、タイマー間隔を例えば0に設定するだけです。 60000ms.

1
user3540753

マウスジグラーはオプションかもしれません: https://mousejiggler.codeplex.com/

1
KERR