tiens:
Il te suffit d'appeler DoShutAction avec en param 1,2 ou 3 suivant que tu veux rebooter, arreter ou delogguer ta machine.
Ya un test de verification de l'os car sous windows NT faut changer les params de sécurité du process
BOOL GetPrivilege();
void ShutDownSystem();
void RebootSystem();
void LogOffSystem();
BOOL GetPrivilege()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
//
// SE_SHUTDOWN_SYSTEM must be enabled
//
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))
{
return FALSE;
}
//
// Get the LUID for SeShutdownPrivilege
//
LookupPrivilegeValue(NULL,"SeShutdownPrivilege",&tkp.Privileges[0].Luid);
//
// one privilege to set
//
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//
// Adjust the privilege for this process.
//
return (AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES) NULL,0));
}
void ShutDownSystem()
{
// Shutdown the system
ExitWindowsEx( EWX_POWEROFF | EWX_FORCE, 0);
}
void RebootSystem()
{
// Reboot
ExitWindowsEx( EWX_REBOOT | EWX_FORCE, 0);
}
void LogOffSystem()
{
// Log Off
ExitWindowsEx( EWX_LOGOFF | EWX_FORCE, 0 );
}
int DoShutAction(int iAction)
{
OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
GetPrivilege();
}
switch (iAction)
{
case 1:
ShutDownSystem();
break;
case 2:
RebootSystem();
break;
case 3:
LogOffSystem();
break;
}
return 1;
}
[jfdsdjhfuetppo]--Message édité par slashp--[/jfdsdjhfuetppo]