Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Вниз

Как выключить блок АТХ под Windows XP   Найти похожие ветки 

 
@lexey   (2002-09-23 22:44) [0]

Вот так я пытаюсь перезагрузить или выключить компьютер в Windows XP. Работает на ура! НО! Не могу выключить блок ATX!!!
Кто знает прошу помощи. Заранее спасибо!

procedure Shutdown(Name:String; // Имя машины (\\SERVER)
msg:String; // Сообщение
Delay:Integer; // Задержка перед рестартом
CloseAll,
Restart:Boolean);
var
ph:THandle;
tp,prevst:TTokenPrivileges;
results:Cardinal;
begin
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,ph);
LookupPrivilegeValue(nil,"SeShutdownPrivilege",tp.Privileges[0].Luid);
tp.PrivilegeCount:=1;
tp.Privileges[0].Attributes:=2;
AdjustTokenPrivileges(ph,FALSE,tp,SizeOf(prevst),prevst,results);
InitiateSystemShutdown(PChar(name),PChar(msg),Delay,CloseAll,Restart);
end;


 
Song   (2002-09-24 09:04) [1]

Чтобы выключить локальную машину надо использовать ExitWindowsEx()


 
@lexey   (2002-09-24 23:59) [2]

ExitWindowsEx работает только в Win32, а под NT или XP не работает, много раз пробовал.


 
Song   (2002-09-25 13:58) [3]

Чтобы работал надо получить соответтсвующие привелегии. Подробности в FAQ.


 
NeyroSpace   (2002-09-25 17:35) [4]

Есть API библ. для управлением питанием (винч, монитор, комп)


 
@lexey   (2002-09-26 23:10) [5]

NeyroSpace, а не подскажешь какая? И где найти ее заголовочный файл?
Заранее спасибо!
Song, помоему я получил все привелегии. И еще раз повторяю функция ExitWindowsEx() не станет работать в NT.


 
Song   (2002-09-27 08:38) [6]

2@lexey © (26.09.02 23:10)
А я Вам говорю, что работает.


 
Vladimir Gorkov   (2002-10-02 08:14) [7]

Вот полностью рабочий код под все ОС.
Другое дело если имеется ввиду именно NT 4.0 то там нужно менять hal.dll



#define chINITSTRUCT(structure, fInitSize) \
(ZeroMemory(&(structure), sizeof(structure)), \
fInitSize ? (*(int*) &(structure) = sizeof(structure)) : 0)

#define STRICT

//#include <vcl\Condefs.h>
#include <windows.h>
//---------------------------------------------------------------------------
void ShowLastError();

int WINAPI WinMain (HINSTANCE , HINSTANCE , PSTR , int )
{
bool result;
LUID Luid; // address of locally unique identifier
HANDLE hToken;

HANDLE hProcess = GetCurrentProcess();

// Нужно сперва определить операционную систему.
// Если это NT то необходимо будет этому процессу получить привилегии
// для завершения работы системы. А если это клон 95 то можно сразу
// вызывать функцию завершения.
OSVERSIONINFO VerInfo; \
chINITSTRUCT(VerInfo, TRUE); \
GetVersionEx(&VerInfo); \
// Если это NT то получить права доступа
if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
{

result = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES, &hToken);
if (!result)
{
ShowLastError();
return 0;
}

result = LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &Luid);
if (!result)
{
ShowLastError();
return 0;
}

LUID_AND_ATTRIBUTES Privileges[1];

Privileges[0].Luid = Luid;
Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0] = Privileges[0];

result = AdjustTokenPrivileges(

hToken, // handle to token that contains privileges
false, // flag for disabling all privileges
&tp, // pointer to new privilege information
NULL, // size, in bytes, of the PreviousState buffer
NULL, // receives original state of changed privileges
NULL // receives required size of the PreviousState buffer
);

if (!result)
{
ShowLastError();
return 0;
}
} // if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)

result = ExitWindowsEx (EWX_POWEROFF, NULL);

if (!result)
{
ShowLastError();
} // if (!result)

return 0;
}

//--------------------------------------------------------------------
void ShowLastError()
{
LPVOID lpMsgBuf;

FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpMsgBuf,
0,
NULL );

// Display the string.
MessageBox( NULL, (LPTSTR)lpMsgBuf, "Error", MB_OK|MB_ICONINFORMATION );

// Free the buffer.
LocalFree( lpMsgBuf );

}



 
han_malign   (2002-10-02 10:11) [8]

;[ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon ]

;" PowerdownAfterShutdown "="1"

http://www.wintoun.fromru.com


 
Udjin   (2002-10-02 16:43) [9]

Можно и так

procedure shutdown;
var
hToken:THandle;
tkp,PrevState:_TOKEN_PRIVILEGES;
k:DWORD;
begin
OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);

LookupPrivilegeValue(nil, "SeShutdownPrivilege", tkp.Privileges[0].Luid);
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(PrevState), PrevState, k);
ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN,0);

end;


 
vidiv   (2002-10-08 09:05) [10]

А я видал где-то код на асме, там блок просто берет и выключается, как будто из розетки выдернули, если кто знает дайте...


 
biocron   (2002-10-08 09:43) [11]

ЕСть компонент AHM юзай его, там есть перезагрузка, работает под 2000 и 98, и скорее всего будет под XP



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.008 c
1-59103
GIL
2002-11-08 05:39
2002.11.18
Динамическое создание формы


3-59052
ComDiv
2002-10-29 17:32
2002.11.18
Долго формируется запорс


1-59161
Arhangel
2002-11-08 18:16
2002.11.18
Как создать ocx без формы?


3-59009
AlexLumpov
2002-10-28 23:19
2002.11.18
Как передать в IB через SQLQuery параметр NULL


1-59117
Eugene_
2002-11-08 11:27
2002.11.18
Создание массива из области памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский