Чтобы это все работало, необходимо добавить в раздел uses ссылку на модуль Registry. Теперь все готово для создания программных шуток . Сначала объявим все глобальные переменные в разделе var:
var
Form1: TForm1;
//для отключения мыши и клавиатуры
Dummy: integer = 0;
OldKbHook: HHook
//для снятия копии экрана
ВМР1: Graphics.TBitmap;
DC1: HDC;
Image1
// для поиска случайного рисунка
fn
Finds: integer;
i
endval: integer;
err_str
tm
reg: TRegistry;
JokeNum: shortint
curs: TRect;
Все шутки будут описаны в обработчике события таймера OnTimer.
Добавьте в этот обработчик следующий код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
JokeNum:= Random(10) + 1;
case JokeNum of
1: begin
//код первой шутки
end;
2:
begin
//код второй шутки
end;
3: begin
//код третьей шутки
end;
4: begin
//код четвертой шутки
end;
5: begin
//код пятой шутки
end;
6: begin
//код шестой шутки
end;
7: begin
//код седьмой шутки
end;
8: begin
//код восьмой шутки
end;
9: begin
//код девятой шутки
end;
10: begin
//код десятой шутки
end;
end;
end;
Это шаблон для генератора шуток. Здесь выбирается случайное число от 1 до 10, которое будет определять, какую из шуток выполнить на этой минуте. Далее будут представлены фрагменты кода, выполняющие определенные действия, которые следует вставлять вместо комментария в соответствующую ветку конструкции case.
Шутка №1 — ограничение диапазона движения мыши
Итак, первая шутка заключается в наложении ограничения на диапазон движения мыши:
сurs:= Rect(0, 0, Screen.Width div 2, Screen.Height);
ClipCursor(@curs);
После этого указатель мыши можно будет перемещать только в одной половине экрана.
Шутка №2 — отключение кнопок мыши
Вторая шутка будет более радикальной: используя перехваты функций, отключим кнопки мыши — ни левая, ни правая, ни средняя кнопка не будут выполнять никаких действий. Для этого напишите в разделе implementation следующую функцию:
function KbHook(code: Integer; wparam: Word; lparam: LongInt): LongInt; stdcall;
begin
if code < 0 then
Result:= CallNextHookEx(oldKbHook, code, wparam, lparam)
else
Result:= 1;
end;
После этого напишите код для второй шутки:
SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy,0);
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
OldKbHook:= SetWindowsHookEx(WH_mouse, @KbHook, HInstance, 0);
После этого ни одна из кнопок мыши функционировать не будет.
Шутка №3 — отключение клавиатуры
Используя функцию для отключения мыши, можно написать код для отключения клавиатуры. Напишите такой код для третьей шутки:
SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy, 0);
SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);
OldKbHook:= SetWindowsHookEx(WH_KEYBOARD, @KbHook, HInstance, 0);
Здесь вызывается та же функция, только вместо параметра WH_MOUSE ей передается WH_KEYBOARD. После этого клавиши на клавиатуре перестанут функционировать.
Шутка №4 — очистка буфера обмена
Четвертая шутка будет очищать буфер обмена и помещать туда собственный текст. Ее код:
ClipBoard.Open;
ClipBoard.Clear;
//Помещаем в буфер обмена свой текст