Другие языки программирования и технологии

Помогите написать программу выключения компьютера на С++

Вот захотел написать программу простейшую для выключения компьютера, но вот в С++ работал мало и чувствую даже такая задача не по мне, ну просто нужно для работы.. функционал программы следующий и простой...:- при запуске это программы должно появится такое же предупреждение как и при запуске через командную строку команду shutdown -s -f и просто выключится вот и все)) если есть желающие помочь, отпишитесь желательно с програмкой, думаю труда не составит вам, заранее благодарен :)
Держи функцию) (сразу предупреждаю - сдесь (на ответах) код курочиться, поэтому если нужен готовый отлаженый исходник - пиши на мыло) Я когда-то такой фигней тоже маялся)

bool shoot(bool reboot, bool force)
{
OSVERSIONINFO ver;
ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&ver);
if (ver.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
HANDLE hToken;
TOKEN_PRIVILEGES* NewState;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken);
NewState=(TOKEN_PRIVILEGES*)malloc(sizeof(TOKEN_PRIVILEGES) + sizeof (LUID_AND_ATTRIBUTES));
NewState->PrivilegeCount = 1;
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&NewState->Privileges[0].Luid);
NewState->Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, NewState, NULL, NULL,NULL);
free(NewState);
CloseHandle(hToken);
}

UINT mode = 0;
if (reboot)
mode += EWX_REBOOT;
else
mode += EWX_POWEROFF;

if (force) mode += EWX_FORCE;

return ExitWindowsEx(mode, 0);
}

Использование :

shoot(false,true); - форсированное выключение без запроса о сохранении документов
shoot(true,false); - перезагрузка
shoot(false,false); - простое выключение с запросом о сохранении документов

Ставишь на таймер, и все)

Вот пример таймера (обработчик)
Определяем int k и задаем ей количество секунд, через сколько выключать.
например пишешь int k=60;
В таймере (интервал 1 секунда) :
k--;
AnsiString chas,min,sec; // не обязательно) )
chas = k/3600; // не обязательно) )
min = k/60-chas*60; // не обязательно) )
sec = k % 60; // не обязательно) )
Button1->Caption = chas + " : " + min + " : " + sec; // не обязательно) )
if(k==0)
{
Timer1->Enabled = false;
shoot(false,true);
Close();
}
Как, наверное, стало понятно - 60 секунд и форсированное выключение)))
АК
Андрей Корнилов
694
Лучший ответ
ShellExecute nебе в помощь.
вот тебе и ответ. Кулер все объяснил. Если хочешь чтобы утилитка напрямую работала то пиши на Асме ИМХО. А самая прикольная вещь это будильник спаянный с рубильником, безотказная вещь :)
Ну ты сам же и ответил на свой вопрос! Создай таймер, и через определенный интервал вызови утилиту shutdown с выбранными параметрами!
И не важно на чем программишь. Вся прога - пара вызовов WinApi
КЕ
Куат Елеуов
1 063