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 :

arrêter windows 2000 avec fonction delphi ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2002
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 41
    Par défaut arrêter windows 2000 avec fonction delphi ?
    bonjour,
    y a t-il une fonction qui nous permet d'arrêter complètement la machine tournant sous windows 2000 ou XP ?
    mes remerciements.

  2. #2
    Membre chevronné

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274

  3. #3
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    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 : 14 086
    Par défaut
    Voici un exe, qui fait le boulot (c'était pour rebooter un ordi via maintenance a distance, lorsque l'outil de controle ne propose pas le reboot, j'ai fait ça pour un collègue), c'est juste un dpr ...

    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
    53
    program ForceShutDown;
     
    uses Forms, Windows;
     
    {$R *.res}
     
    procedure ExitWindowsMsg(const PlatformCaption: PChar);
    begin
      case MessageBox(Application.Handle, PChar('Windows '+PlatformCaption+' : ShutDown(Yes) or Reboot(No) ?'), 'Confirmation', MB_YESNOCANCEL) of
        IDYES : if System.DebugHook = 0 then ExitWindowsEx(EWX_SHUTDOWN, 0) else Beep(3000, 1);
        IDNO : if System.DebugHook = 0 then ExitWindowsEx(EWX_REBOOT, 0) else Beep(2000, 1);
        else
          if System.DebugHook = 0 then Exit else Beep(1000, 1);
      end;
    end;
     
    var
      OSInfo: OSVERSIONINFO;
      TokenHandle, ReturnLength: Cardinal;
      NewState, PreviousState: TTokenPrivileges;
      lpLuid: TLargeInteger;
    begin
      Application.Initialize();
      Application.Run();
     
      OSInfo.dwOSVersionInfoSize := SizeOf(OSVERSIONINFO);
      if GetVersionEx(OSInfo) then
      begin
        if OSInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
        begin
          if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TokenHandle) then
          begin
            try
              if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', lpLuid) then
              begin
                NewState.PrivilegeCount := 1;
                NewState.Privileges[0].Luid := lpLuid;
                NewState.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
                if AdjustTokenPrivileges(TokenHandle, False, NewState, SizeOf(NewState), PreviousState, ReturnLength) then
                begin
                  ExitWindowsMsg('NT');
                end;
              end;
            finally
              CloseHandle(TokenHandle);
            end;
          end;
        end else
        begin
          ExitWindowsMsg('9x');
        end;
      end;
    end.
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !

    J'ai testé sur 2K le dpr de Shai : brut de copier/coller, ça n'éteint pas la machine.
    Il faut certainement remplacer EWX_SHUTDOWN par EWX_POWEROFF pour l'extinction, mais c'est difficile à tester en cours de travail, hein,

    Mes 2 cts,
    --
    jp

  5. #5
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Il faut modifier d'abord réclamer le privilège gentiment à Windows 2000 (c'est comme pour XP), voir la FAQ citée plus haut

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !

    J'ai testé pour vous avec EWX_POWEROFF, ça s'éteint correctement.
    Et le reboot fonctionne également.

    @Waskol : pas compris ton post...

    Mes 2 cts,
    --
    jp

Discussions similaires

  1. LoadLibrary avec C++ Builder 6 sous Windows 2000
    Par tgempp dans le forum C++Builder
    Réponses: 15
    Dernier message: 13/11/2003, 19h19
  2. Réponses: 4
    Dernier message: 23/07/2003, 13h07
  3. ADSI avec windows 2000
    Par alex2205 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 25/03/2003, 16h59
  4. [VB6] Gestionnaire des tache de windows 2000 avec VB6
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h21

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