Sujet : [tout langage] programmer un reboot automatique de Windows |
tfj57 |
mogi a écrit a écrit :
merci tfj57 pour son magnifique pgm qui fonctionne très bien... 'puis c moins couteux que d'acheter iis :)
Mogi.
|
Ok, apparemment ça fonctionne bien.
Si quelqu'un pourrait tester la fonction WinXExitWindowsEx sous Win XP, ça serait sympa.
SoWhatIn22 a écrit a écrit :
Autre solution:
windows étant un OS autodemerdant, tu le laisse faire, il finira bien par se crasher tout seul ;)
Ou alors tu installes IIS et tu le mets sur le reseau. Tu va voir, ta machine va rebooter toute seul de temps en temps.
mouarf :D
|
:lol: Heu, il a dit qu'il veut rebooter toutes les 1/2 heures, pas toutes les 2 minutes :lol: [edtdd]--Message édité par tfj57--[/edtdd] |
tfj57 |
Salut,
Un Sleep(...) peut l'argement suffire et n'occupe pas le proc pour rien.
Par contre éteindre ou redémarrer l'ordinateur sous Win2K, c'est autre chose. Voici une vielle routine (sous VC++ 6.0) qui permet de faire cela sur n'importe quel Win (jamais testé sous XP).
A+
------------------------
#include "stdafx.h"
// WinXExitWindowsEx adaptée d'un exemple de David Gerhart (voir ExitWindowsEx)
int WinXExitWindowsEx(UINT uFlags)
{
int ret;
OSVERSIONINFO ver;
ret=0;
ver.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
if (!GetVersionEx(&ver))
ret=GetLastError();
else
{
if (ver.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS) // Win 95/98
{
if (!ExitWindowsEx(uFlags,0))
ret=GetLastError();
}
else if (ver.dwPlatformId==VER_PLATFORM_WIN32_NT) // Win NT/2K
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
// Avant d'utiliser ExitWindowsEx, il faut avoir le privilège SE_SHUTDOWN_NAME
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hToken))
ret=GetLastError();
else
{
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid);
tkp.PrivilegeCount=1;
tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
if (GetLastError() != ERROR_SUCCESS)
ret=GetLastError();
else
{
if (!ExitWindowsEx(uFlags,0))
ret=GetLastError();
}
}
}
else
ret=-1;
}
return(ret);
}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
Sleep(1000*60*30); // attente de 30mn (en ms) sans utiliser de temps processeur
WinXExitWindowsEx(EWX_REBOOT); // reboot
return 0;
} |