Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 15.08.2011, 19:46   #1 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Паскаль и Дельфи

Здравствуйте,у меня вот что пришло в голову,возможно в дельфи или в паскале написать такую прграмму - "При нажатие кнопки выключается компьютер " Если вдруг ктонибуть знает как это сделать,жду ваших ответов
jax вне форума   Ответить с цитированием

Старый 15.08.2011, 19:46
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Я думаю, что лучше сначала набраться информации в аналогичных темах

StringGrid в Дельфи
Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Паскаль АВС

Старый 16.08.2011, 08:34   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Команда выключения компьютера 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 вашей кнопки
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 16.08.2011, 08:55   #3 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Вот листинг, позволяющий выключить компьютер из ОС 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-ку автор не проверял, поэтому неизвестно, заработает ли под ними.
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 16.08.2011, 10:57   #4 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо,щас попробую,я на XP проверю,я думал не кто не ответит))
jax вне форума   Ответить с цитированием
Старый 16.08.2011, 11:22   #5 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

чё то у меня не получается,я ставлю кнопку,копирую туда код,запускаю,ошибка. Вы сказали прописать в обработчике OnClick,но я не знаю как это сделать,как прописать в обработчике OnClick,скажите пожалуйста,я только начинаю обучатся в дельфи
jax вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 16.08.2011, 13:53   #6 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,794
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Помещаете компоненту Button на форму, делаете двойной щелчок по появившейся кнопке и вставляете код.

З.Ы. В приведенном листинге описаны функции и процедуры без привязки к событиям, вряд ли вы на начальном уровне знаний сможете им воспользоваться. RTFM
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 16.08.2011, 15:39   #7 (permalink)
jax
Технарёнок
 
Регистрация: 30.12.2010
Сообщений: 77
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Всё работает,спасибо большое
jax вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 19:53.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.