Shutdown

Signaler
Messages postés
216
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
15 décembre 2010
-
Messages postés
216
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
15 décembre 2010
-
Alors voila lorsque dans mon programme je fait Shell "shutdown -s -t 0" mon pc ne s'eteind pas, il me laisse le msg vous pouvez eteindre votre ordinateur, comment faire pour ne plus avoir ce message ?

9 réponses

Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
8
labout

Par l'api de windows

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Sub Form_Load()
'KPD-Team 1998
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
msg = MsgBox("This program is going to reboot your computer. Press OK to continue or Cancel to stop.", vbCritical + vbOKCancel + 256, App.Title)
If msg = vbCancel Then End
'reboot the computer
ret& = ExitWindowsEx(EWX_FORCE Or EWX_REBOOT, 0)
End Sub
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
8
labout
Excuses il manquait

Dim msg As String
Dim ret&

@+
Messages postés
216
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
15 décembre 2010

Cette soluce ne marche pas sous XP, mais fonctionne tres bien sous win9x ;-)

Merci ken mem, deplus je cherche tres précisement sur la commande shutdow qui ne m'eteind pas le pc
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
8
labout
J'ai trouvé cela

http://www.vbfrance.com/code.aspx?ID=2960
J'avais trouvé quelque chose sur le net et cela a si bien marché que j'ai tout perdu et je ne peux le retrouver.
@+
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
8
labout
J'ai trouvé ceci et cela marche si bien que cela a rebouté ma machine en XP

J'ai retrouvé
Il faut 4 Optionbutton et 2 checkBox. un command button
Regarde ce qu'il faut sélectionner

Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20
Private Const TOKEN_QUERY As Long = &H8
Private Const SE_PRIVILEGE_ENABLED As Long = &H2

Private Const EWX_LOGOFF As Long = &H0
Private Const EWX_SHUTDOWN As Long = &H1
Private Const EWX_REBOOT As Long = &H2
Private Const EWX_FORCE As Long = &H4
Private Const EWX_POWEROFF As Long = &H8
Private Const EWX_FORCEIFHUNG As Long = &H10 '2000/XP only

Private Const VER_PLATFORM_WIN32_NT As Long = 2

Private Type OSVERSIONINFO
OSVSize As Long
dwVerMajor As Long
dwVerMinor As Long
dwBuildNumber As Long
PlatformID As Long
szCSDVersion As String * 128
End Type

Private Type LUID
dwLowPart As Long
dwHighPart As Long
End Type

Private Type LUID_AND_ATTRIBUTES
udtLUID As LUID
dwAttributes As Long
End Type

Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
laa As LUID_AND_ATTRIBUTES
End Type

Private Declare Function ExitWindowsEx Lib "user32" _
(ByVal dwOptions As Long, _
ByVal dwReserved As Long) As Long

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long

Private Declare Function OpenProcessToken Lib "advapi32" _
(ByVal ProcessHandle As Long, _
ByVal DesiredAccess As Long, _
TokenHandle As Long) As Long

Private Declare Function LookupPrivilegeValue Lib "advapi32" _
Alias "LookupPrivilegeValueA" _
(ByVal lpSystemName As String, _
ByVal lpName As String, _
lpLuid As LUID) As Long

Private Declare Function AdjustTokenPrivileges Lib "advapi32" _
(ByVal TokenHandle As Long, _
ByVal DisableAllPrivileges As Long, _
NewState As TOKEN_PRIVILEGES, _
ByVal BufferLength As Long, _
PreviousState As Any, _
ReturnLength As Long) As Long

Private Declare Function GetVersionEx Lib "kernel32" _
Alias "GetVersionExA" _
(lpVersionInformation As OSVERSIONINFO) As Long

Private Sub Command1_Click()

Dim uflags As Long
Dim success As Long
If Option1.Value True Then uflags EWX_LOGOFFIf Option2.Value True Then uflags EWX_SHUTDOWNIf Option3.Value True Then uflags EWX_REBOOTIf Option4.Value True Then uflags EWX_POWEROFF
If Check1.Value vbChecked Then uflags uflags Or EWX_FORCEIf Check2.Value vbChecked Then uflags uflags Or EWX_FORCEIFHUNG

'if running under NT or better,
'the shutdown privileges need to
'be adjusted to allow the ExitWindowsEx
'call. If the adjust call fails on a NT+
'system, success holds False, preventing shutdown.
If IsWinNTPlus() Then

success = EnableShutdownPrivledges()
If success Then Call ExitWindowsEx(uflags, 0&)

Else

'9x system, so just do it
Call ExitWindowsEx(uflags, 0&)

End If

End Sub

Private Function IsWinNTPlus() As Boolean

'returns True if running Windows NT,
'Windows 2000, Windows XP, or .net server
#If Win32 Then

Dim OSV As OSVERSIONINFO

OSV.OSVSize = Len(OSV)

If GetVersionEx(OSV) = 1 Then
IsWinNTPlus (OSV.PlatformID VER_PLATFORM_WIN32_NT) And _
(OSV.dwVerMajor >= 4)
End If

#End If

End Function

Private Function EnableShutdownPrivledges() As Boolean

Dim hProcessHandle As Long
Dim hTokenHandle As Long
Dim lpv_la As LUID
Dim token As TOKEN_PRIVILEGES

hProcessHandle = GetCurrentProcess()

If hProcessHandle <> 0 Then

'open the access token associated
'with the current process. hTokenHandle
'returns a handle identifying the
'newly-opened access token
If OpenProcessToken(hProcessHandle, _
(TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY), _
hTokenHandle) <> 0 Then

'obtain the locally unique identifier
'(LUID) used on the specified system
'to locally represent the specified
'privilege name. Passing vbNullString
'causes the api to attempt to find
'the privilege name on the local system.
If LookupPrivilegeValue(vbNullString, _
"SeShutdownPrivilege", _
lpv_la) <> 0 Then

'TOKEN_PRIVILEGES contains info about
'a set of privileges for an access token.
'Prepare the TOKEN_PRIVILEGES structure
'by enabling one privilege.
With token
.PrivilegeCount = 1
.laa.udtLUID = lpv_la
.laa.dwAttributes = SE_PRIVILEGE_ENABLED
End With

'Enable the shutdown privilege in
'the access token of this process.
'hTokenHandle: access token containing the
' privileges to be modified
'DisableAllPrivileges: if True the function
' disables all privileges and ignores the
' NewState parameter. If FALSE, the
' function modifies privileges based on
' the information pointed to by NewState.
'token: TOKEN_PRIVILEGES structure specifying
' an array of privileges and their attributes.
'
'Since were just adjusting to shut down,
'BufferLength, PreviousState and ReturnLength
'can be passed as null.
If AdjustTokenPrivileges(hTokenHandle, _
False, _
token, _
ByVal 0&, _
ByVal 0&, _
ByVal 0&) <> 0 Then

'success, so return True
EnableShutdownPrivledges = True

End If 'AdjustTokenPrivileges
End If 'LookupPrivilegeValue
End If 'OpenProcessToken
End If 'hProcessHandle

End Function
Messages postés
107
Date d'inscription
vendredi 8 novembre 2002
Statut
Membre
Dernière intervention
28 mars 2011

Tu cherche quoi précisément sur shutdown ?

Disicom
Messages postés
216
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
15 décembre 2010

Grand merci a toi labout car la on evite la commande shell et en pluson detect l'os, mais sa me laisse toujour le msg merci d'eteindre votre ordinateur (jai pas tester par la force).

Deplus ken je fait eteindre mon pc sa marche nikel

Disicom> Ben je cherche komment eteindre mon pc san avoir le msg vous pouvez eteindre votre ordinateur.
Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
8
labout

J'ai testé cela marche.
Je viens de mettre le source avec les boutons et check en franglais.
@+
Messages postés
216
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
15 décembre 2010

Oui jai vu ta source, elle marche nikel heuuuu j'avous me suis tromper jai tester shutdow et pas poweroff oki sa marcke nikel maintenant et grand merci a toi de m'avoir aider et fait decouvrir une autre metode k shell pour eteindre un pc, on peut noter k ta methode sa fai mon brico ;-)