|
제가 만들어 놓은 프로그램입니다...윈도우.OS별로 재부팅 및 파워 OFF 다..됩니다..
호출하실때 iFlag 값은 EWX_POWEROFF, EWX_REBOOT
#include <shellapi.h>
//---------------------------------------------------------------------------
void __fastcall ShutDown(int iFlag)
{
//0: default 1: 3.1// 2: 98 //3: 95 //4: NT
OSVERSIONINFO verInfo;
verInfo.dwOSVersionInfoSize = sizeof(verInfo);
GetVersionEx(&verInfo) ;
switch(verInfo.dwPlatformId)
{
case VER_PLATFORM_WIN32_WINDOWS:
if(iFlag == EWX_POWEROFF) iFlag = EWX_SHUTDOWN;
ExitWindowsEx(EWX_FORCE|iFlag,0);
break;
case VER_PLATFORM_WIN32_NT:
default:
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
Application->MessageBox("OpenProcessToken failed.",
"Message",
MB_ICONINFORMATION|MB_OK);
}
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)
{
Application->MessageBox("AdjustTokenPrivileges enable failed.",
"Message",
MB_ICONINFORMATION|MB_OK);
}
ExitWindowsEx(EWX_FORCE|iFlag,1);
break;
}
}
|