Програмно выключить комп

  Вход на форум   логин       пароль   Забыли пароль? Регистрация
On-line:  

Раздел: 
Программирование на CAVO / / Програмно выключить комп

Страницы: 1  новая тема

Автор Сообщение

Группа: Участники
Сообщений: 26
Добавлено: 11-01-2010 10:29
Есть в API функция для выключения компа

InitiateSystemShutdown(String2Psz("My_PC"),String2Psz(""),1, True, True)

Но при условии, что процесс имеет привилегию SE_SHUTDOWN_NAME. Цитирую из хелпа:
To shut down the local computer, the calling process must have the SE_SHUTDOWN_NAME privilege.

Не могу понять как это сделать.
Или может быть есть другие способы решения этой проблемы.

Группа: Участники
Сообщений: 26
Добавлено: 19-01-2010 05:56
В инете нашел следующее решение. Для меня, то что надо. Может кому-то еще пригодится.

FUNCTION FabExitWindows( dwMode AS DWORD ) AS LOGIC

// dwMode is like EWX_SHUTDOWN, EWX_REBOOT and so on

LOCAL lRet AS LOGIC
LOCAL ptrVI IS _winOSVERSIONINFO
LOCAL hToken AS PTR
LOCAL ptrTP IS _winTOKEN_PRIVILEGES
//
ptrVI.dwOSVersionInfoSize := _SIZEOF( _winOSVERSIONINFO )
GetVersionEx( @ptrVI )

IF ( ptrVI.dwPlatformId == VER_PLATFORM_WIN32_NT )
// With NT, we MUST set the Application privilege
// open access privilege list.

IF OpenProcessToken( GetCurrentProcess(), _OR( TOKEN_ADJUST_PRIVILEGES, TOKEN_QUERY ), @hToken )
ptrTP.PrivilegeCount := 1
// Ask the "shutdown" LUID
LookupPrivilegeValue( NULL_PSZ, String2Psz( SE_SHUTDOWN_NAME ), @ptrTP.Privileges[1].Luid )
// Enable it
ptrTP.Privileges[1].Attributes := SE_PRIVILEGE_ENABLED
AdjustTokenPrivileges( hToken, FALSE, @ptrTP, 0, NULL_PTR, NULL_PTR )
lRet := ( GetLastError () == ERROR_SUCCESS )
ENDIF
ELSE
lRet := TRUE
ENDIF
//
IF lRet
lRet := ExitWindowsEx( dwmode, 0 )
ENDIF
//
RETURN lRet

Страницы: 1  новая тема
Раздел: 
Программирование на CAVO / / Програмно выключить комп

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

KXK.RU