Идентификатор события Windows для изменения уровня заряда батареи

3049
RiddleMeThis

Мне нужно создать задачу в TS на основе изменения уровня заряда батареи. Допустим, моя батарея падает с 67% до 66% . Как я могу запустить задачу на основе этого события. Windows вообще регистрирует это? Я не мог найти эту информацию нигде.

8
Какая версия Windows? DavidPostill 7 лет назад 0
Окна 10 (и желательно W7) RiddleMeThis 7 лет назад 0

4 ответа на вопрос

10
DavidPostill

Мне нужно создать задачу в планировщике задач на основе изменения уровня заряда батареи

Windows не регистрирует такие детали как события. Однако вы можете использовать что-то вроде командного файла ниже и создать собственное событие.


Battery.cmd

Этот пакетный файл отслеживает текущий процент заряда батареи и создает пользовательское событие, если заряд падает ниже определенного пользователем порогового значения.

@echo off setlocal EnableDelayedExpansion rem set threshold value set _threshold=82 :start rem get the battery charge rem use findstr to strip blank lines from wmic output for /f "usebackq skip=1 tokens=1" %%i in (`wmic Path Win32_Battery Get EstimatedChargeRemaining ^| findstr /r /v "^$"`) do ( set _charge=%%i echo !_charge! if !_charge! lss !_threshold! ( echo threshold reached rem create a custom event in the application event log rem requires administrator privileges  eventcreate /l APPLICATION /t WARNING /ID 999 /D "Battery charge has dropped" goto :done ) else ( rem wait for 10 minutes then try again timeout /t 600 /nobreak goto :start ) ) :done endlocal 

Заметки:

  • Команда Eventcreateработает на Windows XP до Windows 10 включительно, для работы требуются права администратора
  • Установить _thresholdкак требуется
  • Если батарея падает ниже этого значения, событие с идентификатором 999будет сгенерировано в журнале событий ПРИЛОЖЕНИЯ с описаниемBattery charge has dropped
  • Измените eventcreateкоманду в соответствии с вашей ситуацией.
  • Измените timeoutзадержку в соответствии с вашей ситуацией.

Пример вывода:

Моя батарея в настоящее время имеет заряд 81%. Я установил порог на 82. Вот что происходит, когда я бегу Battery.cmd:

> battery 81 threshold reached  SUCCESS: An event of type 'WARNING' was created in the 'APPLICATION' log with 'EventCreate' as the source. 

И вот новая запись в журнале событий:

enter image description here


синтаксис события

EVENTCREATE [/S system [/U username [/P [password]]]] /ID eventid [/L logname] [/SO srcname] /T type /D description  Description: This command line tool enables an administrator to create a custom event ID and message in a specified event log.  Parameter List: /S system Specifies the remote system to connect to.  /U [domain\]user Specifies the user context under which the command should execute.  /P [password] Specifies the password for the given user context. Prompts for input if omitted.  /L logname Specifies the event log to create an event in.  /T type Specifies the type of event to create. Valid types: SUCCESS, ERROR, WARNING, INFORMATION.  /SO source Specifies the source to use for the event (if not specified, source will default to 'eventcreate'). A valid source can be any string and should represent the application or component that is generating the event.  /ID id Specifies the event ID for the event. A valid custom message ID is in the range of 1 - 1000.  /D description Specifies the description text for the new event.  /? Displays this help message.   Examples: EVENTCREATE /T ERROR /ID 1000 /L APPLICATION /D "My custom error event for the application log"  EVENTCREATE /T ERROR /ID 999 /L APPLICATION /SO WinWord /D "Winword event 999 happened due to low diskspace"  EVENTCREATE /S system /T ERROR /ID 100 /L APPLICATION /D "Custom job failed to install"  EVENTCREATE /S system /U user /P password /ID 1 /T ERROR /L APPLICATION /D "User access failed due to invalid user credentials" 

Дальнейшее чтение

  • Индекс AZ командной строки Windows CMD - Отличный справочник по всем вопросам, связанным с командной строкой Windows.
  • eventcreate - Создать пользовательское событие в средстве просмотра событий Windows.
  • schtasks - Создание / редактирование запланированного задания / задачи. Задание может быть создано на локальном или удаленном компьютере.
  • wmic - команда инструментария управления Windows.
Мне действительно это нравится! Из вашего POV лучше создавать события и запускать задачи на основе событий (например, сценарий PS)? Или ... измените этот скрипт, чтобы он запускал мой скрипт PS, если уровень заряда батареи падает на 1%. Я предположил, что Windows создает события для изменения уровня заряда батареи. Я не думал об этом подходе, который мог бы быть лучше. RiddleMeThis 7 лет назад 0
@MiHa до вас. Что легче всего понять и поддерживать :) DavidPostill 7 лет назад 1
@MiHa [Регистрация событий питания / батареи] (// stackoverflow.com/q/18514076), http://www.robvanderwoude.com/sourcecode.php?src=battstat_xp и http://www.robvanderwoude.com/sourcecode .php? src = battrun_xp и может также стоит прочитать DavidPostill 7 лет назад 0
6
magicandre1981

Существует Microsoft-Windows-Batteryпоставщик ETW с BatteryPercentRemainingсобытием с идентификатором 13. Вы можете кодировать проект, который использует TraceEvent для создания прослушивателя в реальном времени для этого Microsoft-Windows-Batteryпоставщика. Событие имеет записи, RemainingPercentageчтобы показать статус и PercentageChangeувидеть изменения:

enter image description here

Когда вы увидите это событие и увидите -1изменения для PercentageChange, запустите нужную программу.

2
AneesAhmed777

Хорошо, скрипт, предоставленный DavidPostill, не работает. Это хороший маленький скрипт, но код либо ошибочный, либо устаревший.

Вот фиксированный:

@echo off setlocal EnableDelayedExpansion rem set threshold value set _threshold=30 :start rem get the battery charge rem use findstr to strip blank lines from wmic output for /f "usebackq skip=1 tokens=1" %%i in (`wmic Path Win32_Battery Get EstimatedChargeRemaining ^| findstr /r /v "^$"`) do ( set _charge=%%i echo !_charge! if !_charge! lss !_threshold! ( echo threshold reached rem create a custom event in the application event log rem requires administrator privileges eventcreate /l APPLICATION /t WARNING /ID 999 /D "Battery charge has dropped below the threshold." goto :done ) else ( rem wait for 1 minute then try again timeout /t 60 /nobreak goto :start ) ) :done endlocal 

Я предложил это изменение в ответе Дэвида Постилла, но я не знаю, почему оно не было одобрено ...

Он поставил меня на правильный путь, поэтому я принял его ответ, но большое спасибо! для вашего фиксированного сценария. RiddleMeThis 7 лет назад 0
Исправляя код, я осознал, насколько ошибочным и ошибочным является `findstr` ... Слишком плохо! Серьезно, Microsoft? Я впечатлен грязным маленьким взломом Дэвида Постилла, чтобы сделать работу. AneesAhmed777 7 лет назад 0
0
Gary Weinstein

There is a much easier way to check battery level. In navigation area just put mouse over the battery icon and it will give a percentage.

Да, но это действительно не то, что я хотел ... Я хотел автоматически контролировать уровень заряда батареи и в зависимости от уровня заряда батареи делать некоторые вещи (снова автоматически) RiddleMeThis 7 лет назад 0
Пожалуйста, внимательно прочитайте вопрос. Ваш ответ ** не ** отвечает на оригинальный вопрос. DavidPostill 7 лет назад 0