Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Надо выключить компьютер


Шустрый ©   (2003-07-05 13:24:00) 

С помощью следующей процедуры SendMessage
(FindWindow("Progman", "Program Manager"), WM_CLOSE, 0, 0);
Я вызываю виндовское окно завершения работы. Подскажите плиз как, не вызывая его, выключить компьютер? Спасибо за помощь!


Шустрый   (2003-07-10 10:02:00) [1]

Как это не на Delphi? На шестом пишу. Вот код и ошибки:
procedureShutdown(Flags: DWORD);
var
hToken: THandle;
Luid: Int64;
NewPrivileges: TTokenPrivileges;
OldPrivileges: TTokenPrivileges;
OldPrivilegesSize: DWORD;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT
then // получения привилегий для платформы NT
begin
// получения локального уникального ИД
Win32Check(LookupPrivilegeValue(nil, "SeShutdownPrivilege", Luid)
// получения токена процесса
Win32Check(OpenProcessToken(GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
NewPrivileges.PrivilegeCount := 1;
NewPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
NewPrivileges.Privileges[0].Luid := Luid;
// настройка привилегий
AdjustTokenPrivileges(hToken,
False,
NewPrivileges,
SizeOf(OldPrivileges),
OldPrivileges,
OldPrivilegesSize);
try
Win32Check(GetLastError = ERROR_SUCCESS);
finally
CloseHandle(hToken);
end
end;
( ExitWindowsEx(Flags, 0)

Как это не на Delphi? На шестом пишу. Вот код и ошибки:
procedureShutdown(Flags: DWORD);
var
hToken: THandle;
Luid: Int64;
NewPrivileges: TTokenPrivileges;
OldPrivileges: TTokenPrivileges;
OldPrivilegesSize: DWORD;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT
then // получения привилегий для платформы NT
begin
// получения локального уникального ИД
Win32Check(LookupPrivilegeValue(nil, "SeShutdownPrivilege", Luid)
// получения токена процесса
Win32Check(OpenProcessToken(GetCurrentProcess,
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);
NewPrivileges.PrivilegeCount := 1;
NewPrivileges.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
NewPrivileges.Privileges[0].Luid := Luid;
// настройка привилегий
AdjustTokenPrivileges(hToken,
False,
NewPrivileges,
SizeOf(OldPrivileges),
OldPrivileges,
OldPrivilegesSize);
try
Win32Check(GetLastError = ERROR_SUCCESS);
finally
CloseHandle(hToken);
end
end;
Win32Check(ExitWindowsEx(Flags, 0));
end;

Где выделено там ошибки


Pat   (2003-07-09 12:46:00) [2]

>Шустрый © (09.07.03 12:27)
Так ты ж не в Делфи пишешь!!!

P.S. телеPATов тут нет. Давай код и ошибки


Шустрый   (2003-07-09 12:27:00) [3]

Компилятор прямо ОРЁТ на меня, столько непонятных ему слов находит Ж)


Anatoly Podgoretsky   (2003-07-09 09:52:00) [4]

http://podgoretsky.com/ftp/Language/nps/ru.delphi.html#N162

Но лучше взять все 4


Шустрый   (2003-07-09 09:42:00) [5]

Спасибо, но какой именно FAQ? Их там много.


Anatoly Podgoretsky   (2003-07-08 19:03:00) [6]

Шустрый © (07.07.03 14:08)
Возьми FAQ с моего сайта, тема Q-162


Шустрый   (2003-07-08 18:57:00) [7]

Извините за наглость, а не могли бы вы написать готовый обработчик события всего этого, pleeease)))


Morfein   (2003-07-07 23:05:00) [8]

ShellExecute(0, nil, "c:\windows\rundll32.exe", "Krnl386.exe,exitkernel", nil, SW_SHOWNORMAL);


Pat   (2003-07-07 21:54:00) [9]

>или не так надо :)))
Я бы сказал, что так не надо.. :)
ExitWindowsEx() всегда вполне хватало для подобных операций. Примеров в инете много для всех ОС


Шустрый   (2003-07-07 20:03:00) [10]

Ну как пишу в uses-shellapi, потом в Button.onclick пишу ShellExecute(Application.Handle, PChar("Open"),
PChar("C:\Windows\Rundll32.exe"),
PChar("Krnl386.exe, exitkernel"),
PChar("C:\Windows"), SW_SHOWNORMAL);
или не так надо :)))


Pat   (2003-07-07 16:31:00) [11]

>Шустрый © (07.07.03 14:08)
А что пробуешь-то???

см Palladin © (05.07.03 13:29) и не забудь SeeAlso: AdjustTokenPrivileges


Шустрый   (2003-07-07 14:08:00) [12]

А не работает, жму на кнопку - ноль внимания:( У меня XP, может от этого зависит? Помогите


Pat   (2003-07-06 17:18:00) [13]

uses ShellApi


Шустрый   (2003-07-06 16:47:00) [14]

Сори за ламерство, но компилятор выдаёт ошибку на ShellExecute,
что надо написать в private (или ничего не надо??) Спасибо ещё раз:)


Vladymir   (2003-07-06 02:32:00) [15]

ShellExecute(Application.Handle, PChar("Open"),
PChar("C:\Windows\Rundll32.exe"),
PChar("Krnl386.exe, exitkernel"),
PChar("C:\Windows", SW_SHOWNORMAL);

А дальше ядро само знает что делать(грамотно)...


Palladin   (2003-07-05 13:29:00) [16]

ExitWindow
ExitWindowEx

SeeAlso: AdjustTokenPrivileges


Наверх

Титульная страница Поиск, карта сайта Написать письмо