유휴 END 조건에 어떤 Windows 7 작업 스케줄러 이벤트가 응답합니까?


8

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이면 오류와 함께 실행되었습니다 (실행 파일을 찾지 못했습니다). 컴퓨터가 유휴 상태 가 아닌 경우 다른 작업을 실행하기 위해 배치 스크립트에서 해당 환경 변수를 이용하고 있습니다 .


Windows 7 의 유휴 상태를 어떻게 정의 합니까?
Der Hochstapler

내가 알기를 바랍니다. 나는 그것을 해킹하는 방법을 보았다. 내가 찾은 (그리고 테스트 된) 가장 좋은 대답은 유휴 상태가 15 분 동안 사용자 활동 (키보드 또는 마우스 등 입력)이없고 CPU 사용량이 거의 없을 때 트리거되는 것입니다.
r_alex_hall

참고로, 나는이 Windows 이벤트가 매우 불완전하다는 것을 알았으며 (항상 재개 된 사용자 활동에 응답하지는 않았습니다), 질문으로 달성하려는 목표는 AutoHotkey를 통해 훨씬 더 나은 프로그램으로 달성되었습니다. 개발 : github.com/r-alex-hall/farmComm
r_alex_hall

답변:


4

유휴 이벤트 (유휴 상태를 입력하거나 종료)에서 트리거 "테두리"를 감지하는 방법을 구현할 수는 없지만 Windows가 유휴 상태에 들어가 유휴 트리거 된 작업을 실행하도록 명령하는 명령이 있습니다. :

Rundll32.exe advapi32.dll,ProcessIdleTasks

이벤트 로그에서 다른 이벤트를 결합하여이 명령을 실행하여 유휴 상태에서 실행해야하는 다른 작업을 트리거 할 수 있습니다. 지금까지 원하는 모든 작업을 자유롭게 결합 할 수 있습니다.


1
흠. . . 그것은 나를 생각하게한다. . . Rundll32.exe없이 그런 식으로 접근 할 수 있습니다. 컴퓨터 유휴 상태에서 ProgA를 실행하도록 예약 된 taskA를 설정 한 다음 1 분에 한 번 batchB.bat를 실행하는 TaskB를 설정할 수 있습니다. BatchB.bat는 Pslist를 사용하여 ProgA가 실행 중인지 확인하고 그렇지 않은 경우 ProgB를 실행합니다. 컴퓨터가 유휴 상태 인 경우에도 ProgA가 계속 실행되므로 자체적으로 작동하지 않습니다. . . 그러나. . . (방금 깨달았습니다!) "컴퓨터가 유휴 상태 인 경우 [프로그램]을 중지하십시오"라는 작업 스케줄러 조건이 있습니다. 이것이 ProgA의 실행을 중단하면 batchB.bat는 ProgB를 실행합니다!
r_alex_hall
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.