Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Connaitre l'etat de l'ordinateur

0 views
Skip to first unread message

sophie.cape

unread,
Apr 2, 2008, 8:35:15 AM4/2/08
to
Bonjour
Je programme en C++ et je voudrais savoir s'il est possible de savoir si
windows est allumé, en veille, en veille prolongée, arreté.. pour un petit
programme sur l'electricité dépencée par un ordinateur.
J'attend vos réponses


Jean-Claude BELLAMY

unread,
Apr 2, 2008, 8:19:35 AM4/2/08
to
"sophie.cape" <sophi...@wanadoo.fr> a écrit dans le message de
news:fsvr1f$pjq$1...@aioe.org...

> Bonjour
> Je programme en C++ et je voudrais savoir s'il est possible de savoir si
> windows est allumé, en veille, en veille prolongée, arreté.. pour un petit
> programme sur l'electricité dépencée par un ordinateur.


Depuis un autre ordinateur je présume ?

Tout ce que tu pourras savoir, c'est si l'ordinateur concerné est acessible
depuis le réseau ou non, et rien d'autre!

Quand il est en veille prolongée, il est totalement arrêté par essence même
de la veille prolongée, donc aucune distinction n'est possible.
Il y a bien le fichier d'hibernation (hiberfil.sys), mais pour tester sa
présence et état il faudrait accéder aux ressources de l'ordinateur, donc il
faudrait ... qu'il soit démarré !!!
De toute façon, au niveau consommation électrique, arrêt et veille
prolongée, c'est STRICTEMENT la même chose.

En ce qui concerne la veille simple, c'est un peu plus complexe car dans cet
état l'ordinateur est toujours sous tension (mais en puissance réduite).
L'ordinateur peut redémarrer sur une action de la souris, du modem, de la
carte réseau (si elle est du type "Wake up LAN") ou encore du bouton de
marche.
Ici il faudra donc passer par la carte réseau, en lui envoyant le "paquet
magique" de réveil (trame contenant les octets FF FF FF FF FF FF suivis de
de l'adresse MAC répétée 16 fois, et éventuellement un mot de passe de 4 ou
6 octets).


Donc pour tester l'état "veille" ou "allumé", on pourra procéder ainsi :

- accès à une resource réseau dont on sûr de l'existence,
p.ex. le fichier "c:\boot.ini"
-> si l'accès réussit, c'est que l'ordinateur est actif sur le réseau.
-> si l'accès échoue, on envoie le paquet magique,
puis on reteste l'accès à la ressource
-> si l'accès réussit, c'est que l'ordinateur était en veille
et qu'à présent il est actif sur le réseau.
-> si l'accès échoue, cela veut dire uniquement que
l'ordinateur n'est pas visible depuis le réseau.

- si au final l'accès a échoué, on peut RIEN conclure.
En effet, l'ordinateur peut très bien être actif, mais avec une carte réseau
HS, ou avec une configuration réseau qui interdise toute transaction, (pas
de réponse aux "Ping", partages désactivés, ...)


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org

sophie.cape

unread,
Apr 2, 2008, 10:15:09 AM4/2/08
to
C'est seulement un programme concu pour un ordinatuer seul qui démarre au
démarrage de windows pour compter le temps qui s'est écoulé depuis son
démarrage.
Le probleme est que si l'utilisateur met son ordinateur en veille prolongée,
l'ordinateur ne consomme rien mais le programme ne detecte rien (car windows
s'arret pas).
On pourais alors alors essayer d'acceder a une ressource pour savoir si
l'ordinateur est allumé ou en veille prolongée, mais s'il n'accede pas a la
ressource,l'ordinateur peut etre seulement en veille, et pas en veille
prolongée, ce qui change pour mesurer la consommation d'electricité.

N'existrait pas une fonction de l'api windows qui permetrait de savoir
directement dans quel etat est l'ordinateur?


Solanar

unread,
Apr 2, 2008, 9:28:08 AM4/2/08
to
Maître "sophie.cape" nous raconte

Si c'est pour la conso je mettrai plutot un compteur sur la prise...

--
Solanar
"Etre libre, c'est n'avoir rien à perdre"

Christian ASTOR

unread,
Apr 2, 2008, 10:54:14 AM4/2/08
to
On 2 avr, 16:15, "sophie.cape" <sophie.c...@wanadoo.fr> wrote:

> Le probleme est que si l'utilisateur met son ordinateur en veille prolongée,
> l'ordinateur ne consomme rien mais le programme ne detecte rien (car windows
> s'arret pas).
> On pourais alors alors essayer d'acceder a une ressource pour savoir si
> l'ordinateur est allumé ou en veille prolongée, mais s'il n'accede pas a la
> ressource,l'ordinateur peut etre seulement en veille, et pas en veille
> prolongée, ce qui change pour mesurer la consommation d'electricité.
>
> N'existrait pas une fonction de l'api windows qui permetrait de savoir
> directement dans quel etat est l'ordinateur?

Windows envoie WM_POWERBROADCAST

Antoine ROUCHET

unread,
Apr 2, 2008, 12:21:52 PM4/2/08
to
"sophie.cape" <sophi...@wanadoo.fr> wrote in message
news:ft00tc$dv6$1...@aioe.org...

Bonjour,

Tu peux faire une simple mesure périodique de l'heure, genre toutes les x
secondes. Si entre deux mesures l'écart est supérieur à mettons x*2
secondes, alors tu peux partir du principe que l'ordinateur est passé par
une veille prolongée.

Antoine.


sophie.cape

unread,
Apr 3, 2008, 3:50:56 PM4/3/08
to


Le probleme c'est que si on constate un écart, on ne sait pas si
l'ordinateur est en veille prolongée ou en veille simple.


Sylvain SF

unread,
Apr 3, 2008, 3:45:13 PM4/3/08
to
sophie.cape wrote on 03/04/2008 21:50:
> Le probleme c'est que si on constate un écart, on ne sait pas si
> l'ordinateur est en veille prolongée ou en veille simple.

et c'est grave ?

je veux dire d'affirmer sans chercher !? car il est quasi-évident
que l'OS envoie une notification différente dans les 2 cas.

au delà êtes-vous sur d'avoir analyser judicieusement le problème?
votre exposé commençant par "comment faire tourner un programme
sur un PC *éteint* laisse quelque doutes ...

si laborieusement vous arrivez à mesurer ce qui est déjà enregistré
sur le log système (ie un event à chaque démarrage, un à chaque
arrêt, un à chaque mise en veille, ...) ne craigniez-vous pas de
découvrir ce que vous savez sûrement déjà (que le PC est resté en
marche toute la nuit tel jour, ou qu'il est utilisé x heures tel
autre jour) ? si pour souci est énergétique, mesurez le temps de
marche ne vous donnera que de très long - ou au prix de grosses
approximations - sa dépense énergétique, un watt-mêtre ou un
compteur de consommation sur sa prise serait bien plus
instructif.

Sylvain.

Thierry

unread,
Apr 4, 2008, 4:14:26 AM4/4/08
to
"sophie.cape" <sophi...@wanadoo.fr> a écrit dans le message de news:
ft38ue$7qm$1...@aioe.org...

> Le probleme c'est que si on constate un écart, on ne sait pas si
> l'ordinateur est en veille prolongée ou en veille simple.

*etait*

WM_POWERBROADCAST doit satisfaire tes besoins.


Thierry

unread,
Apr 4, 2008, 4:15:10 AM4/4/08
to

"Thierry" <yar...@com.invalid> a écrit dans le message de news:
47f5e350$0$27963$426a...@news.free.fr...

+ WM_ENDSESSION


sophie.cape

unread,
Apr 4, 2008, 12:42:42 PM4/4/08
to

>>
>> WM_POWERBROADCAST doit satisfaire tes besoins.
>
> + WM_ENDSESSION
>
>

Desolé mais je ne connais pas trop l'api windows. Comment recuperer ces
valeurs?


greg

unread,
Apr 5, 2008, 2:53:32 PM4/5/08
to

Tout est détaillé dans MSDN..

Patrick 'Zener' Brunet

unread,
Apr 21, 2008, 1:58:51 AM4/21/08
to
Bonjour.

"sophie.cape" <sophi...@wanadoo.fr> a écrit dans le message de news:

fsvr1f$pjq$1...@aioe.org...

Heu... Après lecture du fil, il y a un truc qui n'a pas encore l'air clair:

Quand l'ordinateur hiberne ou est arrêté, il ne fait plus rien (c'est le
but), quelle que soit la manière dont c'est programmé.
Et quand il se réveille, il n'a aucun moyen de savoir dans quel état il
était et combien de temps ça a duré.

Enfin, disons qu'on pourrait récupérer l'instant et même le mode de l'arrêt
dans le journal système (au besoin avec un module complémentaire) et faire
le calcul au réveil... Mais en cas de coupure électrique par exemple, que
dalle.

Donc pour une telle application, la seule solution crédible est de faire
assembler un module électronique approprié, capable de détecter les tensions
du bus PCI et de mémoriser les événements dans une mémoire alimentée sur
pile, et qui soit ensuite consultable depuis un programme.
Vous pourriez faire (faire) ça à l'économie avec un micro-contrôleur PIC et
pour la base, en détournant une carte d'extension de ports par exemple...

Sur fr.sci.electronique, vous trouverez sans doute des références et
peut-être même les coordonnées de volontaires si vous ne connaissez personne
du domaine. Pas moi, navré je suis surbooké...

--
Cordialement.
--
* Patrick BRUNET
* E-mail: lien sur http://zener131.free.fr/ContactMe

sophie.cape

unread,
Apr 22, 2008, 9:55:44 AM4/22/08
to

> Heu... Après lecture du fil, il y a un truc qui n'a pas encore l'air
> clair:
>
> Quand l'ordinateur hiberne ou est arrêté, il ne fait plus rien (c'est le
> but), quelle que soit la manière dont c'est programmé.
> Et quand il se réveille, il n'a aucun moyen de savoir dans quel état il
> était et combien de temps ça a duré.
>
> Enfin, disons qu'on pourrait récupérer l'instant et même le mode de
> l'arrêt
> dans le journal système (au besoin avec un module complémentaire) et faire
> le calcul au réveil... Mais en cas de coupure électrique par exemple, que
> dalle.
>
> Donc pour une telle application, la seule solution crédible est de faire
> assembler un module électronique approprié, capable de détecter les
> tensions
> du bus PCI et de mémoriser les événements dans une mémoire alimentée sur
> pile, et qui soit ensuite consultable depuis un programme.
> Vous pourriez faire (faire) ça à l'économie avec un micro-contrôleur PIC
> et
> pour la base, en détournant une carte d'extension de ports par exemple...
>
> Sur fr.sci.electronique, vous trouverez sans doute des références et
> peut-être même les coordonnées de volontaires si vous ne connaissez
> personne
> du domaine. Pas moi, navré je suis surbooké...

Je crois que vous avez raison, il vaut mieu utiliser une solution
matérielle. Merci pour vos réponses.


0 new messages