Звонок Юзера (Ю) в tech support фирмы (скажем Datacom) производящей блоки питания:
Ю- Добрый день у меня из блока питания идет дым, что делать?
Сотрудник (С) - Вам нужен новый блок питания.
Ю - Нет не нужен, мне нужно что бы из старого не шел дым.
С- Вы меня наверное не поняли но Вам нужен новый блок питания.
Ю- Зачем мне новый, Вы просто скажите что нужно сделать что бы из старого дым не шел.
С- Наберите в autoexec"e строку no smoke...
Проходит 5 минут.
Ю- Не работает.
С- Значит Вам нужен новый блок питания.
Ю- Нет мне нужно что бы из старого не шел дым.
С- У Вас Винды стоят?
Ю- Да.
С - Ок. Звоните в tech support Microsoft..там все объяснят..
Через 15 минут...
Тот же Юзер - Добрый день, мне нужен новый блок питания.
С (удивленно) - Эээ... а можно поинтресоваться... что Вам сказали в Microsoft???
Ю- Оказывается все было очень просто: команда no smoke не подходит к моему блоку питания...
procedure LockPC;
var
OldValue: LongBool;
begin
SystemParametersInfo(97, Word(Bool), @OldValue, 0);
WinExec(PChar('rundll32 mouse,disable'), SW_SHOW);
WinExec(PChar('rundll32 keyboard,disable'), SW_SHOW);
end;
What an amusing conversation indeed! 😄
Теперь о коде... LockPC - это процедура, которая пытается отключить мышь и клавиатуру на системе Windows. Вот разбивка того, что она делает:
SystemParametersInfo(97, TRUE, @OldValue, 0);: Это вызов функции, которая получает текущие параметры системы (в этом случае, значение "Timeout для экранной саверы"). Часть Word(Bool) - это, вероятно, ошибка - она должна быть просто TRUE или FALSE. Синтаксис @OldValue означает, что функция возвращает значение в памяти, указанной по адресу OldValue.
WinExec(PChar('rundll32 mouse,disable'), SW_SHOW);: Это выполняет командную утилиту под названием "rundll32" (функцию Windows API) с аргументами "mouse,disable" и отображает ее в виде окна (SW_SHOW означает отобразить окно). Эффект должен быть отключением мыши.
WinExec(PChar('rundll32 keyboard,disable'), SW_SHOW);: Это выполняет еще один экземпляр "rundll32" с аргументами "keyboard,disable" и отображает его в виде окна, пытаясь отключить клавиатуру.
Теоретически эти вызовы должны отключить оба устройства на системе. Однако, есть несколько проблем с этим кодом:
Вызов SystemParametersInfo - это, вероятно, неправильный (как упоминалось ранее).
Утилита "rundll32" может не работать так, как ожидалось.
Эти функции могут требовать привилегированных прав или административных прав для выполнения успешно.
Чтобы достичь цели блокировки компьютера (например, для безопасности), обычно используются API, такие как LockWorkStation или ExitWindowsEx, в зависимости от желаемого поведения. Например:
Обратите внимание, что это код не предназначен для использования в производственной среде и должен быть тщательно проверен и протестирован перед использованием. 😊
Статья рассказывает о способах блокировки компьютера и описывает программный код на языке Паскаль для выполнения этой задачи.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.