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 :

Function Arreter PC


Sujet :

Delphi

  1. #1
    Membre actif
    Inscrit en
    Avril 2010
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 102
    Par défaut Function Arreter PC
    Bonjour à tous, j'ai créé un programme dans Delphi 2010 qui éteint l'ordinateur à une heure précise, et le compte Windows xp professionnel 2002 sp 3 est verrouillé avec un mot de passe, mais lorsque l'ordinateur commence à s'éteindre, le compte avec le mot de passe s'ouvre et le bureau Windows apparaît.

    Le code utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Function ArreterPC: Boolean;
    Var
      Token: THandle;
      TokenPrivilege: TTokenPrivileges;
      Outlen: Cardinal;
      Error: Dword;
     
    Const
      SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
     
    Begin
      Result:=False;
     
    // Récupère les informations de sécurité pour ce process.
      if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Token)
        then Exit;
     
      try
        FillChar(TokenPrivilege, SizeOf(TokenPrivilege),0);
          // Valeur de retour
        Outlen := 0;
          // Un seul privilége à positionner
        TokenPrivilege.PrivilegeCount := 1;
          // Récupère le LUID pour le privilége 'shutdown'.
          // un Locally Unique IDentifier est une valeur générée unique jusqu'a ce
          // que le système soit redémarré
        LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TokenPrivilege.Privileges[0].Luid);
          // Positionne le privilége shutdown pour ce process.
        TokenPrivilege.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
        AdjustTokenPrivileges(Token, False, TokenPrivilege, SizeOf(TokenPrivilege),nil, OutLen);
        Error:=GetLastError;
        If Error <> ERROR_SUCCESS
          then Exit;
     
          // Arrête le système
          //Pour terminer la session en cours : EWX_LOGOFF
          //Pour arrêter Windows ( n'arrête pas l'alimentation ) : EWX_SHUTDOWN
          //Pour arrêter Windows et l'alimentation : EWX_POWEROFF
          //Pour redémarrer Windows : EWX_REBOOT
          //Pour forcer la fin des process avant le redémarrage de Windows : EWX_SHUTDOWN + EWX_FORCE
          //Pour forcer l'arrêt des applications et le PC* : EWX_SHUTDOWN + EWX_FORCEIFHUNG
     
        if ExitWindowsEx(EWX_SHUTDOWN + EWX_FORCE, 0) = False    // Areter malgre Delphi ouvert
          then Exit;
     
        Result:=True;
     
      finally
     
        CloseHandle(Token);
      end;
    end;

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 993
    Par défaut
    Cela ressemble à la FAQ : Comment arrêter ou relancer Windows ?

    J'avais aussi écrit un programme du genre pour éteindre un PC en remote (dans une session TSC qui ne pouvait pas être éteint autrement) dont en voici le Code posté en 2008 en le Code posté en 2012 mais qui beaucoup plus vieux, je ne l'ai pas utilisé depuis WinXP je pense.

    Je note la différence uniquement sur EWX_POWEROFF vs EWX_SHUTDOWN
    Je suppose que tu as testé les deux sans succès.

    Tu aurais été dans un Windows plus récent, j'aurais dit que cela pouvait avoir changé mais un XP SP2, c'est tout à fait la cible des codes que j'ai écrit, je ne constate pas ce qui pourrait bloquer.




    Sinon avec une tache planifié, tu peux directement appeler le program "SHUTDOWN.EXE", c'est fourni par Microsoft !
    Autant l'utiliser puisqu'il existe.

    je te recommande SHUTDOWN.EXE -r -f -t 01 pour le rédemarrage et SHUTDOWN.EXE -s /hybrid -f -t 01 pour l'arrêt


    Code help : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Utilisation*: SHUTDOWN.EXE [/i | /l | /s | /r | /g | /a | /p | /h | /e | /o] [/h
    ybrid] [/f]
        [/m \\ordinateur][/t xxx][/d [p|u:]xx:yy [/c "commentaire"]]
     
        Sans argument    Afficher l’aide. Cela revient à entrer /?.
        /?         Afficher l’aide. Cela revient à n’entrer aucune option.
        /i         Afficher l’interface utilisateur graphique (GUI).
                   Ce doit être la première option.
        /l         Fermer la session. Ne peut pas être utilisé avec l’option /m
                   ou /d.
        /s         Arrêter l’ordinateur.
        /r         Redémarrer complètement l’ordinateur.
        /g         Redémarrer complètement l’ordinateur. Redémarrer
                   ensuite toutes les applications enregistrées.
        /a         Annuler un arrêt du système.
                   Utilisable uniquement pendant le délai imparti.
        /p         Arrêter l’ordinateur local sans délai d’expiration ou
                   avertissement.
                   Peut être utilisé avec l’option /d et /f.
        /h         Mettre l’ordinateur local en veille prolongée.
                   Utilisable avec l’option /f.
        /hybrid    Arrête l’ordinateur et le prépare pour un démarrage rapide.
                   Doit être utilisé avec l’option /s.
        /e         Documenter la raison de l’arrêt inattendu d’un ordinateur.
        /o         Accéder au menu des options de démarrage avancées et redémarrer l
    ’ordinateur.
                   Doit être utilisé avec l’option /r.
        /m \\ordinateur Spécifier l’ordinateur cible.
        /t xxx     Définir la durée avant l’arrêt au bout de xxx secondes.
                   La plage valide est comprise entre*0 et*315360000 (10 ans), 30 ét
    ant la valeur par défaut.
                   Si le délai avant expiration est*supérieur à*0, le paramètre /f
                   est sous-entendu.
        /c "commentaire" Commentaire sur la raison du redémarrage ou de l’arrêt.
                   512*caractères maximum autorisés.
        /f         Force la fermeture des applications en cours d’exécution sans pré
    venir les utilisateurs.
                   Le paramètre /f est sous-entendu lorsqu’une valeur supérieure à*0
     
                   est spécifiée pour le paramètre /t.
        /d [p|u:]xx:yy  Fournit la raison du redémarrage ou de l’arrêt.
                   p indique que le redémarrage ou l’arrêt est planifié.
                   u indique que la raison est définie par l’utilisateur.
                   Si ni p ni u ne sont spécifiés, le redémarrage ou l’arrêt n’est
                   pas planifié.
                   xx représente le code de raison principale (entier positif inféri
    eur à 256).
                   yy représente le code de raison secondaire (entier positif inféri
    eur à 65536).
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. Arrêter function setInterval
    Par Friksstyle dans le forum jQuery
    Réponses: 12
    Dernier message: 19/04/2013, 18h39
  2. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum Développement
    Réponses: 6
    Dernier message: 02/01/2003, 12h13
  3. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 13h37
  4. Arrêter un prog si temps de connexion trop long
    Par jakouz dans le forum Langage
    Réponses: 4
    Dernier message: 22/10/2002, 18h28
  5. Detection arret de windows
    Par philippe30 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 21/09/2002, 18h41

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