Справочник функций

Ваш аккаунт

Логин:
Пароль:
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
Убрать блок ВКонтакте навсегда

Последние темы форума

Показать новые сообщения »

Почтовая рассылка



Подписчиков: 19017
Последний выпуск: 23.04.2012

Как же выключить компьютер в Windows XP ?

Дьяченко Константин Константинович

Я долго искал способ выключить компьютер в Windows XP:

Например: функция ExitWindows() вообще сдохла, а ExitWindowsEx() делает только LOGOFF.

И однажды нашёл на одном форуме:

Dim strComputer As String
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate, _
(Shutdown)}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery( _
 "Select * from Win32_OperatingSystem")
For Each ObjOperatingSystem In colOperatingSystems
   ObjOperatingSystem.Reboot ' Для перезагрузки
Next

и:

Dim strComputer As String

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & _ 
"{impersonationLevel=impersonate,(Shutdown)}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery( _ 
"Select * from Win32_OperatingSystem")

For Each ObjOperatingSystem In colOperatingSystems

ObjOperatingSystem.ShutDown 'Для выключения

Next

Примечание: Данный код работает и для VBScript:

P.S. Пробуйте, у меня работает безотказно.

Оставить комментарий

Оставлять комментарии могут только зарегистрированные пользователи.

Если вы не являетесь зарегистрированным пользователем, то вам необходимо зарегистрироваться. Регистрация бесплатна. Если вы уже зарегистрированы на CodeNet, то вам необходимо ввести логин и пароль в верхней (Alt-U) части страницы.

Комментарии

1. Agent Fire / 15 января 2006, 01:13:44
Мне нравитсяМне не нравится

Отправь мне пожалуйта этот кодик с NtShutDown, попробую разобраться:
NoviksPlavnik@mail.ru

2. Мих мих / 05 декабря 2005, 20:54:11
Мне нравитсяМне не нравится

Это же просто как два пальца обос...
Сначала получаем привелегию SeShutdownPrivilege функцией AdjustTokenPrivileges.
Затем на выбор:
"Нормально" выкл. комп - ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0);
Метод покруче - NtShutdownSystem(0); (Функция находится в ntdll.dll; вырубает комп без вопросов и примерно за 0,2 сек)
Можно еще отправить комп в спящий режим - NtInitiatePowerAction(3,2,3,0); (Но это уже не в ту степь; функция находится тоже в ntdll.dll)
Учите Native API, Товарищи, это офигенно мощная штука!

3. atDaemon / 01 октября 2004, 16:43:31
+0 / -1
Мне нравитсяМне не нравится

Я тоже столкнулся как-то раз с этой проблемой. ExitWindowsEx работает безотказно... Вот только поскольку WindowsXP построена на ядре NT для выключения компьютера необходимо иметь соответствующие привилигии. Т.е. перед использованием ExitWindowsEx необходимо получить эти привелегии. На C++ делается так:

OSVERSIONINFO osvi;
osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osvi);
BOOL isNT=(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT);

if(isNT)
{
DWORD err;
HANDLE cp=NULL;
cp=OpenProcess(PROCESS_ALL_ACCESS,FALSE,GetCurrentProcessId());
if(cp==INVALID_HANDLE_VALUE)
{
err=GetLastError();
return FALSE;
}
HANDLE ot=NULL;
OpenProcessToken(cp,TOKEN_ADJUST_PRIVILEGES,&ot);
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount=1;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
if(!LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&(tp.Privileges[0].Luid)))
{
err=GetLastError();
return FALSE;
}
if(!AdjustTokenPrivileges(ot,FALSE,&tp,NULL,NULL,NULL))
{
err=GetLastError();
return FALSE;
}
}

Сначала делается проверка если выполнение происходит под WindowsNT (В том числе и 2к ХР и пр... %). Далее если Windows - NT то осуществляется открытие процесса и изменение привелегий... Подробнее об изменениях привелегий - MSDN DLL's processes and threads...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог
Сайт Бэби. Все про беременность только здесь. Заходите , Бесплатно windows 7