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
|
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TOKEN_PRIVILEGES wTokenin, wTokenOut;
DWORD wLength;
HANDLE wCurrentProcess, wToken;
_LUID wLuid;
OSVERSIONINFO wOsVer;
try
{
wCurrentProcess = GetCurrentProcess();
OpenProcessToken(wCurrentProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QURY, &wToken);
LookupPrivilegeValue(NULL, "SeShutdownPrivilege", &wLuid);
wTokenin.PrivilegeCount = 1;
wTokenin.Privileges[0].Luid = wLuid;
wTokenin.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(wToken, FALSE, &wTokenin, sizeof(TOKEN_PRIVILEGES), &WTokenOut, &wLength);
CloseHandle(wToken);
}
__finally
{
Application->ProcessMessage();
if(Button1)
{
ExitWindowsEx(EWX_REBOOT | EWX_FORCEIFHUNG, 0);
else
{
wOsVer.dwOSVersionInfoSize = sizeof(wOsVer);
GetVersionEx(&wOsVer);
if(wOsVer.dwPlatFormID == VER_PLATFORM_WIN32_WINDOWS)
ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCEIFHUNG, 0);
else
ExitWindowsEx(EWX_POWEROFF | EWX_FORCEIFHUNG, 0);
}
{
//Mettre ici ce que tu veut faire avant la fermeture de windows.
Application->Terminate();
}
}
} |
Partager