![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Надо выключить компьютер
Шустрый © (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