web-dev-qa-db-ja.com

XP VBscriptを使用するマシンの自動ロック機能を防ぐ方法

自動化スクリプトの実行中にマシンがロックされます。これは、さまざまなスクリプト間に長い間隔があるためです(これは、いくつかの理由で必要です)。この自動ロック機能を避けたい。問題は、セキュリティポリシーに従って、コントロールパネルからこの機能を無効にできないことです。システムのロックを解除する他の方法はありますか?

12
Srivi

定期的にキーを押すことでロックを停止できると思いますので、 WScript.SendKeys を確認することをお勧めします。次に、それをスリープ状態のループに入れて、定期的に送信するようにします。

ただし、送信するキーに注意してください。他のキーには影響しません。

6
Hans Olsson

私はこれを行いました... 2つのSCROLLLOCKキーをすばやく送信するので、アプリケーションに干渉することはありません(まあ、何も深刻なことはありません)。これは60秒ごとに行われます。

set wsc = CreateObject("WScript.Shell")
Do
WScript.Sleep (60*1000)
wsc.SendKeys ("{SCROLLLOCK 2}")
Loop
18
st0le

ペアのファイルを使用しています...

最初のファイル(Keep_Awake__start.vbs)は、物事を起こしたりロック解除したりします。 2番目のファイル(Keep_Awake__end.vbs)は、通常のプロセスに戻りたいときにプロセスを終了します。

最初のファイル...

' Keep_Awake__start.vbs
' Graham Edwards

' Typical stored in Start Menu 
'
' Use Keep_Awake__start.vbs to keep the computer from inactivity-based lockouts.
' Use Keep_Awake__end.vbs to remove Keep_Awake__start.vbs

' Largely pulled from st0le response
' Http://stackoverflow.com/questions/4457907/how-to-prevent-auto-locking-feature-of-an-xp-machine-using-vbscript

' --- Define Object
    set wsc = CreateObject("WScript.Shell")

' --- Loop every so many minutes and change the scroll lock setting 
    Do
        ' Wait for ~2 minutes
        WScript.Sleep (2*60*1000)
        wsc.SendKeys ("{SCROLLLOCK 2}")
    Loop

2番目のファイル...

' Keep_Awake__end.vbs
' Graham Edwards

' Use Keep_Awake__start.vbs to keep the computer from inactivity-based lockouts.
' Use Keep_Awake__end.vbs to remove Keep_Awake__start.vbs

' Largely pulled from Ansgar Wiechers response
' http://stackoverflow.com/questions/22324899/kill-a-vbscript-from-another-vbscript

' --- Define Object
    Set wmi = GetObject("winmgmts://./root/cimv2")

' --- Search and Destroy
    qry = "SELECT * FROM Win32_Process WHERE Name='wscript.exe' AND NOT " & _
    "CommandLine LIKE '%" & Replace(WScript.ScriptFullName, "\", "\\") & "%'"

    For Each p In wmi.ExecQuery(qry)
      p.Terminate
    Next

' --- Clean up
    Set wmi = Nothing ' Release the Application object

ファイルは、通常のテキストエディターから作成して、どこにでも(デスクトップなど)保存できます。 .vbsファイル拡張子を付けてファイルを保存すると、実行可能になります。したがって、ファイルのアイコンをダブルクリックするだけで、開始または終了することができます(ダブルクリックするファイルによって異なります)。

ログインするとすぐに起動するように、Keep_Awake__start.vbsをWindowsのStartupフォルダーに保存できます。

3
Graham_Edwards

機能する最も簡単な解決策は、mp3またはビデオファイルを開いて、Windowsメディアプレーヤーで継続的に再生することです(リピート機能を使用し、プレーヤーの音量をミュートします)。このようにして、スクリーンセーバーが表示されることも、システムがロックされることもありません。

1
pa1
Set wshShell =wscript.CreateObject("WScript.Shell")
do
  wscript.sleep 55000
  wshshell.sendkeys "{SCROLLLOCK}"
loop

このコードを使用して、ウィンドウが再度ロック解除されるのを防ぐことができます。

0
Anand Dwivedi

次のVBスクリプトコードを使用して、マシンのロックを解除したままにします。

Set objShell = CreateObject("WScript.Shell")
objShell.RegWrite "HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Control Panel\Desktop\ScreenSaverIsSecure", "0" , "REG_SZ"
Wscript.Echo "Your machine remains unlocked"

乾杯!!

0
user2295728

シェルスクリプトを試して、タスクスケジューラでマウスの動きのシミュレーションをスケジュールしました。 + 1で簡単です。マウスをシフトしたピクセルに自動的に移動するため、画面は自動ロックしません(必要に応じて、これを構成するオプションがあります)。

リファレンス:Auto Mouse Mover- http://www.murgee.com/auto-mouse-mover/

0
ekta

私はこのようにしました

(外部ループ=宣言された変数)

'For 64 bit Excel.
Private Declare PtrSafe Function SetCursorPos Lib "user32" _
                        (ByVal x As Long, _
                        ByVal y As Long) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

'For 32 bit Excel.
Private Declare Function SetCursorPos Lib "user32" _
                        (ByVal x As Long, _
                        ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


 ' default variable
 private mousecounter as integer

(手順内)

Dim llCoord As POINTAPI
Dim activeXMousePos As Integer
Dim activeYMousePos As Integer

GetCursorPos llCoord
activeXMousePos = llCoord.Xcoord
activeYMousePos = llCoord.Ycoord

(ループ内):

        If mousecounter <= 2 Then
            SetCursorPos activeXMousePos - 1, activeYMousePos - 1
            mousecounter = mousecounter + 1
        End If

        If mousecounter > 2 Then
            SetCursorPos activeXMousePos + 2, activeYMousePos + 2
            mousecounter = 0
        End If

したがって、基本的にこのコードは、マウスを左上に1ピクセル、右下に1ピクセル移動し、各ループ間隔を移動します。他の値を宣言することもできますが、このマウスの動きはユーザーの邪魔をしないことがわかりました。

0

条件付きの宣言が必要な場合

#If vba7 and win64 then

'For 64 bit Excel.
Private Declare PtrSafe Function SetCursorPos Lib "user32"  (ByVal x As Long,  ByVal y As Long) As Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


#Else

'For 32 bit Excel.
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long,  ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

#End If
0
Shimon Doodkin

これが自動化スイートの実行中の場合は、自動化スイートを使用してマウスTwitchを頻繁に実行してください。私がうまく機能しているのは、独自のカスタムスリープ機能があり、スリープ機能の一部として、マウスをひねる場合です。スクリプト間の長い間隔にこれを使用します。

0
Tom E