web-dev-qa-db-fra.com

ID d'événement Windows pour changement de niveau de batterie

J'ai besoin de créer une tâche dans TS basée sur le changement de niveau de la batterie. Disons que ma batterie tombe de 67% à 66%. Comment puis-je exécuter une tâche basée sur cet événement? Windows enregistre-t-il cela? Je n'ai pas pu trouver cette information n'importe où.

9
RiddleMeThis

J'ai besoin de créer une tâche dans le planificateur de tâches basé sur le changement de niveau de la batterie.

Windows ne colle pas ce genre de détail comme des événements. Vous pouvez cependant utiliser quelque chose comme le fichier de commandes ci-dessous et créer un événement personnalisé.


Batterie.cmd

Ce fichier de lots surveille le pourcentage de pile actuel et crée un événement défini par l'utilisateur si la charge tombe en dessous d'une valeur de seuil définie par l'utilisateur.

@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

Remarques:

  • La commande Eventcreate fonctionne sur Windows XP jusqu'à et y compris Windows 10, il nécessite des privilèges d'administrateur pour travailler
  • Régler _threshold comme demandé
  • Si la batterie tombe en dessous de cette valeur, un événement avec ID 999 sera généré dans le journal des événements d'application avec la description Battery charge has dropped
  • Modifiez la commande eventcreate au besoin pour votre situation.
  • Modifiez le délai timeout au besoin pour votre situation.

Exemple de sortie :

Ma batterie a actuellement une charge de 81%. Je fixe le seuil sur 82. Voici ce qui se passe quand je courais Battery.cmd:

> battery
81
threshold reached

SUCCESS: An event of type 'WARNING' was created in the 'APPLICATION' log with 'EventCreate' as the source.

Et voici la nouvelle entrée dans le journal des événements:

enter image description here


syntaxe EventCreate

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"

En plus de lecture

  • n index A-Z de la ligne de commande Windows cmd - une excellente référence pour toutes les choses Windows CMD Line liée.
  • Eventcreate - Créez un événement personnalisé dans la visionneuse d'événements Windows.
  • Schtasks - Créer/Modifier un travail/tâche planifiées. Le travail peut être créé sur le plan local ou un ordinateur distant.
  • WMIC - Commande d'instrumentation de gestion Windows.
11
DavidPostill

Il y a un fournisseur Microsoft-Windows-Battery Etw avec BatteryPercentRemaining événement avec ID 13. Vous pouvez coder un projet qui utilise traceevent pour créer un écouteur en temps réel Pour ce fournisseur Microsoft-Windows-Battery. L'événement a les entrées RemainingPercentage pour montrer le statut et PercentageChange pour voir le changement:

enter image description here

Lorsque vous voyez cet événement et que vous voyez le -1 Modifier pour PercentageChange, exécutez le programme souhaité.

6
magicandre1981

Ok, le script fourni par Davidposttill ne fonctionne pas. C'est un bon petit script, mais le code est erratique ou obsolète.

Voici le corrigé:

@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

J'ai suggéré cette modification de la réponse de Davidpostill, mais je ne sais pas pourquoi il n'a pas été approuvé ...

2
AneesAhmed777

Il y a un moyen beaucoup plus facile de vérifier le niveau de la batterie. Dans la zone de navigation, mettez simplement la souris sur l'icône de la batterie et cela donnera un pourcentage.

0
Gary Weinstein