Программно выключить комп...
Пожалуйста,подскажите как в программе на с++,в среде builder,задать команду которая выключит комп.Команда ExitWindowsEx(EWX_SHUTDOWN, 0); ничего не делает.Почему?
ShutDown -s -t 0
перезагрузка
ShutDown -r -t 0
Выход из сеанса
ShutDown -l -t 0
Например
Код:
WinExec('ShutDown -s -t 0', SW_HIDE);
Вообще, используя стандартные функции консоли (с запуском через WinExec или ShellExecute), можно делать очень многое... И это зачастую намного легче, чем писать код в BCB ;)
В Win2K+ процессу собирающемуся вызвать шатдаун надо предварительно получить привилегию выключения компьютера - AdjustTokenPrivileges(). Вот не верю что это еще не обсуждалось на форуме, такой вопрос вообще в ФАКе должен быть..
Цитата: SEA
Пожалуйста,подскажите как в программе на с++,в среде builder,задать команду которая выключит комп.Команда ExitWindowsEx(EWX_SHUTDOWN, 0); ничего не делает.Почему?
Такие вопросы надо задавать в разделе по WinAPI.Насчет привелегий
Код:
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);
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);
К сожалению, потерял код, который выполняет твою задачу. Надо копать WMI (не помню как по-аглицки) - инструментарий управления виндовс. Можно поискать в Windows Script, должна там быть такая штука (но точно не знаю)
В WMI точно есть, поищи в MSDN Shutdown Windows.
Кстати, поищи по данному форуму, может этот ответ на вопрос давно существует :)