pour arrêter le PC
Code : Tout sélectionner
Procedure ComputerShutDown(Param.l)
; Param = paramètre d'instinction de l'ordinateur
; 1 : quitter session
; 2 : arrêter
; 3 : redémarrer
#TOKEN_ADJUST_PRIVILEGES = 32
#TOKEN_QUERY = 8
#SE_PRIVILEGE_ENABLED = 2
#EWX_LOGOFF = 0
#EWX_SHUTDOWN = 1
#EWX_REBOOT = 2
#EWX_FORCE = 4
#EWX_POWEROFF = 8
Structure MyLUID
lowpart.l
highpart.l
Attributes.l
EndStructure
Structure MyTOKEN
PrivilegeCount.l
lowpart.l
highpart.l
Attributes.l
EndStructure
Protected hdlTokenHandle.l, tmpLuid.MyLUID, tkp.MyTOKEN, tkpNewButIgnored.MyTOKEN, lBufferNeeded.l
OpenProcessToken_(GetCurrentProcess_(), #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hdlTokenHandle)
SysName.s = "" + Chr(0)
Name.s = "SeShutdownPrivilege" + Chr(0)
LookupPrivilegeValue_(SysName, Name, @tmpLuid)
tmpLuid\Attributes = #SE_PRIVILEGE_ENABLED
tkp\PrivilegeCount = 1
tkp\lowpart = tmpLuid\lowpart
tkp\highpart = tmpLuid\highpart
tkp\Attributes = tmpLuid\Attributes
AdjustTokenPrivileges_(hdlTokenHandle, 0, @tkp, SizeOf(MyTOKEN), @tkpNewButIgnored, @lBufferNeeded)
Select Param
Case 1 : ExitWindowsEx_(#EWX_LOGOFF | #EWX_FORCE, 0)
Case 2 : ExitWindowsEx_(#EWX_SHUTDOWN | #EWX_FORCE, 0)
Case 3 : ExitWindowsEx_(#EWX_REBOOT | #EWX_FORCE, 0)
EndSelect
EndProcedure
ComputerShutDown(2)
Comme tu le vois, c'est pas simple, car Windows demande les privilèges avant d'autoriser à un programme d'arrêter Windows.
Si ta fonction ne marche pas, c'est les paramètres sont mauvais ou que les droits ne sont pas bon pour arrêter le PC. mais ce n'est pas un soucis de PB.
La seule chose qui peut empêcher une API de fonctionner, c'est une erreur de description des paramètres de la fonction (comme mettre un string à la place d'un pointer dans les paramètres de la fonction, mais c'est très très rare)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]