เหตุการณ์ตัวกำหนดเวลางาน Windows 7 ใดที่จะตอบสนองต่อสภาพ END ที่ไม่ได้ใช้งาน


8

ตัวกำหนดเวลางาน Windows 7 อนุญาตให้ฉันเรียกใช้งานเมื่อคอมพิวเตอร์ไม่ได้ใช้งาน แต่ดูเหมือนจะไม่มีวิธีที่ชัดเจนในการเรียกใช้งานเมื่อคอมพิวเตอร์ดำเนินการต่อจากที่ไม่ได้ใช้งานหรือไม่มีการใช้งานอีกต่อไป

แน่นอนมีบางเหตุการณ์ที่เกิดขึ้นใน windows (บันทึกเหตุการณ์?) เมื่อคอมพิวเตอร์ไม่ได้ใช้งานอีกต่อไป? หรือวิธีการในการจับความจริงที่ว่าคอมพิวเตอร์ไม่ได้ใช้งานอีกต่อไปและตอบสนองต่องานที่กำหนดไว้หรือไม่

ฉันจะทำสิ่งนี้ได้อย่างไร

หรือที่แย่ที่สุดมีโปรแกรมบรรทัดคำสั่งอยู่ที่ไหนที่สามารถเรียกใช้คำสั่งหรือเหตุการณ์เมื่อคอมพิวเตอร์เข้า / ออกจากสถานะว่าง

[อัพเดต:] แนวทางในการตอบ Diogo Rocha ของฉันใช้ได้ผล ฉันสร้าง null ที่สามารถเรียกทำงานได้ผ่าน py2exe จากสคริปต์นี้:

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()

- และตั้งค่างานที่กำหนดเวลาไว้ใน Windows ซึ่งเป็น HTML ที่ส่งออก:

<?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 จะหายไปจากรายการงาน

จากที่นี่เป็นเรื่องของการตั้งค่างาน (หรือโปรแกรม - ที่ฉันทำกับ Python และ py2exe) ที่ใช้ pslist (ที่มีสวิตช์ -accepteula เพื่อให้คอมพิวเตอร์ที่ใช้งานจริงจะเรียกใช้โปรแกรม) ตรวจสอบว่า exe exe ทำงานหรือไม่ หากกำลังทำงานอยู่ตัวแปรสภาพแวดล้อม% ERRORLEVEL% จะถูกตั้งค่าเป็น 0 เนื่องจาก pslist รันโดยไม่มีข้อผิดพลาด หากตัวแปรสภาพแวดล้อมนั้นเป็น 1 มันจะวิ่งไปพร้อมกับข้อผิดพลาด (ไม่พบการปฏิบัติการที่เรียกใช้) ฉันใช้ประโยชน์จากตัวแปรสภาพแวดล้อมในชุดสคริปต์เพื่อเรียกใช้งานอื่นหากคอมพิวเตอร์ไม่ได้ใช้งาน


คุณจะกำหนดสถานะว่างของ Windows 7 ได้อย่างไร
Der Hochstapler

หวังว่าฉันจะรู้ ฉันเคยเห็นวิธีที่จะแฮ็กข้อมูลนั้น คำตอบที่ดีที่สุดที่ฉันพบ (และทดสอบ) คือสถานะว่างดูเหมือนว่าจะถูกเรียกใช้โดยไม่มีกิจกรรมของผู้ใช้ 15 นาที (แป้นพิมพ์หรืออินพุตเมาส์ ฯลฯ ) และการใช้งาน CPU เล็กน้อย
r_alex_hall

เพียงแค่ FYI ฉันคิดว่าฉันพบว่าเหตุการณ์ Windows นี้ไม่สม่ำเสมอมาก (มันไม่ได้ตอบสนองต่อกิจกรรมของผู้ใช้ที่กลับมาทำงานต่อ) และเป้าหมายที่ฉันพยายามทำเพื่อให้บรรลุคำถามนั้นทำได้ดีกว่าด้วย AutoHotkey ในโปรแกรมฉัน พัฒนาแล้ว: github.com/r-alex-hall/farmComm
r_alex_hall

คำตอบ:


4

ฉันไม่คิดว่ามันเป็นไปได้ที่จะใช้วิธีการใด ๆ ในการตรวจจับทริกเกอร์ "border" ในกิจกรรมว่าง (เข้าหรือออกจากสถานะว่าง) อย่างไรก็ตามมีคำสั่งที่บังคับให้ Windows ของคุณเข้าสู่สถานะว่างและเรียกใช้งานทริกเกอร์ :

Rundll32.exe advapi32.dll,ProcessIdleTasks

คุณสามารถรวมเหตุการณ์อื่น (จากบันทึกเหตุการณ์) เพื่อเรียกใช้คำสั่งนี้ซึ่งจะทริกเกอร์งานอื่นที่จะต้องดำเนินการในสถานะไม่ได้ใช้งาน เท่าที่คุณทราบคุณสามารถรวมงานใด ๆ ที่คุณอาจต้องการได้อย่างอิสระ


1
อืม . . ที่ทำให้ฉันคิด . . ฉันสามารถเข้าใกล้ได้โดยไม่ต้องใช้ Rundll32.exe ฉันสามารถตั้งค่า taskA ที่ตั้งเวลาให้รัน ProgA บนคอมพิวเตอร์ที่ไม่ได้ใช้งาน - แล้วตั้งค่า TaskB ซึ่งรัน batchB.bat หนึ่งครั้งต่อนาที BatchB.bat จะใช้ Pslist เพื่อตรวจสอบว่า ProgA ทำงานอยู่หรือไม่และเรียกใช้ ProgB ด้วยตัวเองจะไม่ทำงานเพราะ ProgA จะยังคงทำงานต่อไปแม้ว่าคอมพิวเตอร์จะไม่ได้ใช้งาน . . แต่ . . (ฉันเพิ่งรู้!) มีเงื่อนไขตัวกำหนดตารางเวลางานเป็น "หยุด [โปรแกรม] ถ้าคอมพิวเตอร์สิ้นสุดสภาพการใช้งาน" หากนั่นเป็นการฆ่าการดำเนินการของ ProgA ดังนั้น batchB.bat จะเรียกใช้ ProgB!
r_alex_hall
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.