• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль и Дельфи

  • Автор темы Автор темы jax
  • Дата начала Дата начала

jax

Технарёнок
Регистрация
30 Дек 2010
Сообщения
77
Реакции
0
Баллы
0
Паскаль и Дельфи

Здравствуйте,у меня вот что пришло в голову,возможно в дельфи или в паскале написать такую прграмму - "При нажатие кнопки выключается компьютер " Если вдруг ктонибуть знает как это сделать,жду ваших ответов
 
Команда выключения компьютера shutdown -s . Думаю, прикрутить её к кнопке тоже не составит большого труда :))

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

Вот примеры команд из Delpi World:
rundll32 shell32,SHExitWindowsEx 1
Выключение компьютера

rundll32 shell32,SHExitWindowsEx 0
Завершить работу текущего пользователя

rundll32 krnl386.exe,exitkernel
Выход из Windows без любых вопросов

Вот еще вариант команды выключения компьютера оттуда же :)
ExitWindowsEx(EWX_POWEROFF or ewx_force,0);
Пропишите ее в обработчике OnClick вашей кнопки :)
 
Вот листинг, позволяющий выключить компьютер из ОС Windows:
function GetWinVersion: string;
var
VersionInfo: TOSVersionInfo;
OSName: string;
begin
// устанавливаем размер записи
VersionInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo );
if Windows.GetVersionEx( VersionInfo ) then
begin
with VersionInfo do
begin
case dwPlatformId of
VER_PLATFORM_WIN32s: OSName := 'Win32s';
VER_PLATFORM_WIN32_WINDOWS: OSName := 'Windows 95';
VER_PLATFORM_WIN32_NT: OSName := 'Windows NT';
end; // case dwPlatformId
Result := OSName + ' Version ' + IntToStr( dwMajorVersion ) + '.' + IntToStr( dwMinorVersion ) +
#13#10' (Build ' + IntToStr( dwBuildNumber ) + ': ' + szCSDVersion + ')';
end; // with VersionInfo
end // if GetVersionEx
else
Result := '';
end;

procedure ShutDown;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; // Borland forgot this declaration
var
hToken: THandle;
tkp: TTokenPrivileges;
tkpo: TTokenPrivileges;
zero: DWORD;
begin
if Pos('Windows NT', GetWinVersion) = 1 then // we've got to do a whole buch of things
begin
zero := 0;
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
MessageBox(0, 'Exit Error', 'OpenProcessToken() Failed', MB_OK);
Exit;
end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)

if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
MessageBox(0, 'Exit Error', 'OpenProcessToken() Failed', MB_OK);
Exit;
end; // if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)

// SE_SHUTDOWN_NAME
if not LookupPrivilegeValue( nil, 'SeShutdownPrivilege' , tkp.Privileges[0].Luid ) then
begin
MessageBox(0, 'Exit Error', 'LookupPrivilegeValue() Failed', MB_OK);
Exit;
end; // if not LookupPrivilegeValue( nil, 'SeShutdownPrivilege' , tkp.Privileges[0].Luid )

tkp.PrivilegeCount := 1;
tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, False, tkp, SizeOf( TTokenPrivileges ), tkpo, zero);
if Boolean(GetLastError()) then
begin
MessageBox(0, 'Exit Error', 'AdjustTokenPrivileges() Failed', MB_OK);
Exit;
end // if Boolean( GetLastError() )
else
ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );

end // if OSVersion = 'Windows NT'
else
begin // just shut the machine down
ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
end; // else
end;
Vista и 7-ку автор не проверял, поэтому неизвестно, заработает ли под ними.
 
спасибо,щас попробую,я на XP проверю,я думал не кто не ответит))
 
чё то у меня не получается,я ставлю кнопку,копирую туда код,запускаю,ошибка. Вы сказали прописать в обработчике OnClick,но я не знаю как это сделать,как прописать в обработчике OnClick,скажите пожалуйста,я только начинаю обучатся в дельфи :tehnari_ru_203:
 
Помещаете компоненту Button на форму, делаете двойной щелчок по появившейся кнопке и вставляете код.

З.Ы. В приведенном листинге описаны функции и процедуры без привязки к событиям, вряд ли вы на начальном уровне знаний сможете им воспользоваться. RTFM
 
Всё работает,спасибо большое
 
Назад
Сверху