Блокировка и разблокировка системы
Автор: VID
WEB-сайт: http://delphibase.endimus.com
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Блокировка/Разблокировка системы.
Модуль LockSys. Блокировка/Разблокировка системы.
Метод блокировки: блокируется (по-выбору) клавиатура и мышь,
системные комбинации клавиш, или всё вместе.
БЛОКИРОВКА СИСТЕМЫ: function LockSystem(LockMode:TLockMode):Boolean;
Возможные значения параметра LockMode:
lmInput - блокировка мыши и клавитатуры
lmSystemKeys - блокировка системных комбинаций клавиш
lmBoth = lmInput + lmSystemKeys
В случае успеха функция возвращает True, иначе - False
РАЗБЛОКИРОВКА СИСТЕМЫ: function UnLockSystem(UnLockMode:TLockMode):Boolean;
Входные параметры аналогичны функции LockSystem, но только
речь в данном случае идёт о разблокировке.
В случае успеха - True, иначе - False.
Зависимости: windows
Автор: VID, vidsnap@mail.ru, ICQ:132234868, Махачкала
Copyright: VID (основа списана из одного FAQ)
Дата: 26 мая 2002 г.
***************************************************** }
unit LockSys;
interface
uses
Windows;
type
TLockMode = (lmInput, lmSystemKeys, lmBoth);
function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
function LockSystem(LockMode: TLockMode): Boolean;
function UnLockSystem(UnLockMode: TLockMode): Boolean;
var
xBlockInput: function(Block: BOOL): BOOL; stdcall;
implementation
function FuncAvail(_dllname, _funcname: string; var _p: pointer): boolean;
var
_lib: tHandle;
begin
Result := false;
_p := nil;
if LoadLibrary(PChar(_dllname)) = 0 then
exit;
_lib := GetModuleHandle(PChar(_dllname));
if _lib <> 0 then
begin
_p := GetProcAddress(_lib, PChar(_funcname));
if _p <> nil then
Result := true;
end;
end;
function LockSystem(LockMode: TLockMode): Boolean;
begin
Result := False;
if LockMode = lmSystemKeys then //Locking system
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0) then
Exit;
if LockMode = lmInput then //locking keyb and mouse
if FuncAvail('USER32.DLL', 'BlockInput', @xBlockInput) then
xBlockInput(true)
else
Exit;
if LockMode = lmBoth then
begin
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, nil, 0) then
Exit;
if FuncAvail('USER32.DLL', 'BlockInput', @xBlockInput) then
xBlockInput(true)
else
Exit;
end;
Result := True;
end;
function UnLockSystem(UnLockMode: TLockMode): Boolean;
begin
Result := False;
if UnLockMode = lmSystemKeys then //UnLocking system
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, nil, 0) then
Exit;
if UnLockMode = lmInput then //unlocking keyb and mouse
if FuncAvail('USER32.DLL', 'BlockInput', @xBlockInput) then
xBlockInput(false)
else
Exit;
if UnLockMode = lmBoth then
begin
if not SystemParametersInfo(SPI_SCREENSAVERRUNNING, 0, nil, 0) then
Exit;
if FuncAvail('USER32.DLL', 'BlockInput', @xBlockInput) then
xBlockInput(false)
else
Exit;
end;
Result := True;
end;
end.
Пример использования:
LockSystem(lmBoth); // Блокировка всей системы
UnLockSystem(lmInput); // Разблокировка клавы и мыши
|