유휴 END 조건에 응답하는 Windows 7 작업 스케줄러 이벤트는 무엇입니까?

유휴 END 조건에 응답하는 Windows 7 작업 스케줄러 이벤트는 무엇입니까?

Windows 7 작업 스케줄러를 사용하면 컴퓨터가 유휴 상태일 때 작업을 실행할 수 있지만 컴퓨터가 유휴 상태에서 다시 시작되거나 더 이상 유휴 상태가 아닐 때 작업을 실행하는 확실한 방법은 없는 것 같습니다.

컴퓨터가 더 이상 유휴 상태가 아닐 때 Windows에서 일부 이벤트(이벤트 로그?)가 트리거됩니까? 아니면 컴퓨터가 더 이상 유휴 상태가 아니라는 사실을 포착하고 예약된 작업으로 이에 응답하는 방법이 있을까요?

어떻게 해야 할까요?

아니면 최악의 경우 컴퓨터가 유휴 상태에 진입/종료할 때 명령이나 이벤트를 호출할 수 있는 명령줄 프로그램이 어딘가에 있습니까?

[업데이트:] Diogo Rocha에 대한 내 답변의 접근 방식이 작동합니다. 이 스크립트에서 py2exe를 통해 null 실행 파일을 만들었습니다.

import sys
import time

#restart a pause every twenty seconds, with two functions that call each other.

def call_pause():
    pause()

def pause():
    time.sleep(20)
    call_pause()

call_pause()

--그리고 이것이 내보낸 HTML인 Windows에서 예약된 작업을 설정합니다.

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2012-04-27T17:40:46.8871631</Date>
    <Author>GENIUS-BREATH-COMPY</Author>
    <Description>This task runs ProgA when the computer enters an idle state, and terminates ProgA when the computer *leaves* an idle state. The is all for scheduled TaskB, which periodically runs a batch that tests whether ProgA is running. If ProgA is not running (because this task terminated it), ProgB runs (as the computer is NOT idle). If ProgA *is* running, TaskB's batch does not run ProgB.</Description>
  </RegistrationInfo>
  <Triggers>
    <IdleTrigger>
      <Enabled>true</Enabled>
    </IdleTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>S-1-5-18</UserId>
      <RunLevel>HighestAvailable</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>true</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <Duration>PT1M</Duration>
      <WaitTimeout>PT0S</WaitTimeout>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>true</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>true</RunOnlyIfIdle>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
    <RestartOnFailure>
      <Interval>PT1M</Interval>
      <Count>3</Count>
    </RestartOnFailure>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>C:\path_to\nullExecutable</Command>
    </Exec>
  </Actions>
</Task>

그리고 컴퓨터를 15분 동안 유휴 상태로 두었습니다. 작업 관리자는 null 실행 파일이 실행 중임을 보여주었습니다. 마우스를 움직이자마자 컴퓨터가 유휴 상태에서 벗어나 작업 목록에서 null 실행 파일이 사라졌습니다.

여기서는 pslist(배포된 컴퓨터에서 실제로 프로그램을 실행하도록 -accepteula 스위치 사용)를 사용하는 작업(또는 Python 및 py2exe로 수행하는 프로그램)을 설정하는 문제입니다. null exe가 실행 중인지 확인하십시오. 실행 중인 경우 pslist가 오류 없이 실행되었기 때문에 %ERRORLEVEL% 환경 변수는 0으로 설정됩니다. 해당 환경 변수가 1이면 오류와 함께 실행된 것입니다(실행 중인 실행 파일을 찾지 못했습니다). 컴퓨터가 다음과 같은 경우 다른 작업을 실행하기 위해 배치 스크립트에서 해당 환경 변수를 활용하고 있습니다.~ 아니다게으른.

답변1

유휴 이벤트(유휴 상태에 들어가거나 나가기)에서 트리거 "경계"를 감지하는 방법을 구현하는 것은 불가능하다고 생각합니다. 그러나 Windows가 유휴 상태에 들어가고 유휴 트리거 작업을 실행하도록 강제하는 명령이 있습니다. :

Rundll32.exe advapi32.dll,ProcessIdleTasks

이벤트 로그의 다른 이벤트를 결합하여 이 명령을 실행하면 유휴 상태에서 실행되어야 하는 다른 작업이 트리거됩니다. 당신이 알고 있는 한, 원하는 작업을 자유롭게 결합할 수 있습니다.

관련 정보