IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

détecter session windows depuis un processus system


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Par défaut détecter session windows depuis un processus system
    J'ai écrit une petite application console (merci Laurent Dardenne) qui lancée sur chaque machine avec le planificateur de tâches au "nom" du compte SYSTEM (option /ru "system" dans schtasks), éteint tous les ordinateurs du lycée chaque soir.
    Les élèves ( et les profs) ferment toujours leur session, mais laissent l'ordi allumé en se disant qu'un autre va venir derrière.
    Ces ordis sont donc presque toujours "déconnectés" du serveur.
    Qu'il y ait une session windows ouverte (c'est mon problème) ou non au moment fatidique, l'ordi s'éteint parfaitement et rapidement.
    Au moment d'éxécuter cette appli console, j'aimerais savoir si une session windows est encore ouverte pour ne pas fermer l'ordinateur sous le nez d'un éventuel utilisateur tardif.
    Mais je ne parviens pas à le savoir. Quand par exemple je cherche le contenu de la variable d'environnement %USERNAME%, c'est SYSTEM qui m'est renvoyé (même si il y a une session ouverte), ce qui est normal car c'est SYSTEM qui a lancé mon appli console.
    D'où ma question: comment une application lancée par l' "utilisateur" SYSTEM peut elle détecter un éventuel utilisateur "humain" ?

    Merci de vos conseils.

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 120
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 120
    Par défaut
    Yop !

    Une première piste, probablement balourde mais à cette heure-ci faut pas trop en demander, , et ça va peut-être permettre de lancer le débat : s'il y a "serveur", il y a sans doute des disques réseau (le "home", les dossiers "travaux", les dossiers "échanges", que sais-je), et si le user est déloggué ils n'y sont plus.
    Ton appli devrait pouvoir le détecter, non ?

    Jette un coup d'oeil également à la clé HKCU\Identities, tu devrais pouvoir la faire lire par ton appli, et compare avec ce que tu lis une fois loggué.
    Enfin, il y a aussi des trucs sympas dans HKCU\Volatile Environment...

    C'est intéressant, ton truc, mais c'est ardu car il va falloir que ton appli renvoie un état de la machine hors de toute connection, et comment voir ça ? Dans un fichier log, sans doute.

    Mes 2 cts,
    --
    jp

  3. #3
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Par défaut
    Tiens j'ai pas pensé à faire ça dans mon collège, mais un informaticien m'avait dis qu'il vallait mieux laissé allumé les ordinateurs et les écrans que de passer son temps à les éteindre, ce qu ipouvait endommager l'écran notamment à chaque démarrage.

    Sinon pourquoi ne pas utiliser enumServicesStatus ?

  4. #4
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Par défaut
    Pour Jipété:
    * tester si un lecteur réseau est visible: j'y ai pensé, celà marchera, les défauts sont:
    1) en cas de changement du dit lecteur sur le serveur, je dois modifier l'appli console et repasser sur toutes les machines pour corriger.
    2) L'appli n'est pas exportable sur un autre réseau, dans un autre lycée par exemple, la ressource réseau partagée ne sera pas la même.
    ** Bidouiller dans HKCU: j'ai essayé, le problème est que j'accède à la ruche HKCU de l'utilisateur SYSTEM (normal c'est lui qui lance l'appli), et je ne ne peux pas voir s'il y a un autre utilisateur connecté.
    *** Dans le genre peu élégant: je pourrais créer un petit fichier flag (sur les machines locales) à chaque connexion au domaine, et le détruire à la déconnexion (facile avec la stratégie du domaine). Mon appli n'aurait plus qu'à voir si ce fichier flag existe ou nom pour "savoir" s'il y a une session windows ouverte. Pour celà il faudra que je crée sur chaque machine un répertoire accessible en écriture à tous.

    Tout celà ne me satisfait guère ! Il doit quand même y avoir un moyen de savoir, pour un processus system, si une session utilisateur "humain" windows est ouverte, non ?

    Pour flash_math: une fermeture le soir économisera de l'électricité et le matériel et n'abimera rien du tout, au contraire.
    Quant à enumServicesStatus, je ne connais pas, je vais jeter un coup d'oeil.

  5. #5
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 120
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 120
    Par défaut
    Yop !
    en cas de changement du dit lecteur sur le serveur, je dois modifier l'appli console
    Un fichier ini pour ton appli sur le serveur -> une seule modif ? Et du coup tu peux paramêtrer plein de trucs et de machins.
    petit fichier flag (...) faudra que je crée sur chaque machine (...)
    Non : sur le serveur, et le fichier "flag" aurait le nom du user loggué ? Je verrais bien ça.
    enumServicesStatus (...) je vais jeter un coup d'oeil
    Tiens-nous au courant, et mets-nous le lien de ton inspiration (Laurent).

    Pour Flash_math : oui, c'est ce qu'on disait il y a 20 ans, je pense que la technologie a suffisament évolué et que le matos doit pouvoir résister à une extinction le soir et un rallumage le lendemain, non ?

    Allez, on continue à gamberger,
    --
    jp

  6. #6
    Membre averti
    Inscrit en
    Juin 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 17
    Par défaut
    Citation Envoyé par Jipété
    Yop !
    Un fichier ini pour ton appli sur le serveur -> une seule modif ? Et du coup tu peux paramêtrer plein de trucs et de machins.
    Non : sur le serveur, et le fichier "flag" aurait le nom du user loggué ? Je verrais bien ça.
    --
    jp
    Je comprends mal tes conseils: l'appli est destinée à éteindre des ordinateurs dont 95% sont déconnectés du serveur. Donc elle doit être lancée depuis chaque machine (encore allumée, et en général non connectée) et ne pourra pas exploiter un fichier .ini ou un flag situé sur le serveur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [D6] Détecter la fin du démarrage de la session Windows
    Par Lung dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 04/02/2009, 23h48
  2. Simuler le systeme Windows depuis windows
    Par pi-2r dans le forum Windows XP
    Réponses: 4
    Dernier message: 28/12/2008, 19h47
  3. Service: Détecter si une session Windows a été ouverte?
    Par Mattetfamilly dans le forum Windows
    Réponses: 3
    Dernier message: 01/12/2006, 11h15
  4. Comment détecter si une session Windows est ouverte?
    Par yosthegost dans le forum Delphi
    Réponses: 3
    Dernier message: 23/05/2006, 17h42
  5. Détecter la fermeture d'une session Windows
    Par atao29 dans le forum MFC
    Réponses: 1
    Dernier message: 15/02/2006, 11h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo