Исходные коды программ и игр

Программирование - работа и хобби

Исходный код программы-шутки

Язык программирования C#

Интерфейс на Windows Forms

Программа-шутка на C#Исходник построен на интерфейсе Windows Forms. Простой, надежный и проверенный временем интерфейс. Язык программирования C#. Оформление интерфейса данной программы-шутки может быть любым, потому что рабочий интерфейс формируется из копии изображения экрана. Внешне программа состоит из маленького окна с одной кнопкой. При нажатии на эту кнопку запускается скрытый процесс шутки. Программа совершенно безопасна для операционной системы, не оставляет никаких записей реестре, не влияет на работу программ и только создает временные визуальные эффекты зависания компьютера.

Алгоритм работы программы

Программа работает по следующему алгоритму:
  • Запуск программы. Формируется окно с симпатичной картинкой.
  • Нажатие на кнопку «Запуск». Окно программы скрывается и запускается процесс ожидания событий таймера.
  • Событие таймера формирует изображение экрана и загружается в контейнер PictureBox расположенный на форме окна программы. Окно становится видимым, размещается поверх других приложений и так как поверхность окна — это изображение экрана 1:1 то создаётся впечатление зависание компьютера.
  • Следующее событие таймера и окно программы-шутки незаметно скрывается. «Компьютер выходит из зависания», вроде бы 😁.

События таймера замыкают процесс показа и скрытия копии изображения экрана. При лихорадочных щёлканьях раздраженного пользователя 😂 процесс ненадолго прерывается и затем всё повторяется вновь. Отключить программы можно двойным щелчком по застывшему экрану при предварительно нажатой кнопке Ctrl.

Методы класса FormJokeScreen

Программа простая по компоновке, построена на классе формы FormJokeScreen. В данный класс добавлены несколько методов и событий, обеспечивающих процесс создания цифровой шутки.

Перечислим созданные методы и события:
  • CopyScreen()
  • Reset()
  • Event buttonStart_Click(…)
  • Event pictureScreenFake_DoubleClick(…)
  • Event timerProcess_Tick(…)

Метод CopyScreen()

Метод CopyScreen() отвечает за создание точной копии изображения экрана и расположения её на поверхности формы программы-шутки. В качестве контейнера для изображения выступает PictureBox.

private void CopyScreen()
{
    // Получаем размеры экрана дисплея.
    int widthScreen = Screen.PrimaryScreen.Bounds.Width;
    int heightScreen = Screen.PrimaryScreen.Bounds.Height;

    // Создаем битовый массив (картинку) размером как у экрана монитора.
    var bitmapImage = new Bitmap(widthScreen, heightScreen);

    // Создаем поверхность рисования на созданном выше битовом массиве (картинке).
    var drawingSurface = Graphics.FromImage(bitmapImage);

    // Копируем изображение экрана в битовый массив.
    drawingSurface.CopyFromScreen(0, 0, 0, 0, bitmapImage.Size);

    // Созданную копию изображения экрана загружаем в PictureBox,
    // расположенный на поверхности окна программы-шутки.
    pictureScreenFake.Image = bitmapImage;
}

Метод Reset()

Метод Reset() прекращает процесс цифровой шутки и восстанавливает первоначальный вид окна программы.

/// <summary>
/// Остановка процесса шутки,
/// и восстановление окна до первоначального вида.
/// </summary>
private void Reset()
{
    // Останавливаем таймер
    timerProcess.Stop();

    // В первую очередь:
    // Восстанавливаем первоначальный вид
    this.FormBorderStyle = FormBorderStyle.FixedToolWindow;

    // Во вторую очередь:
    // Восстанавливаем размер и положение окна на экране
    this.Bounds = rectangleBounds;

    // Восстанавливаем первоначальную картинку.
    pictureScreenFake.Image = Properties.Resources.улыбка;

   // Окно становится обычным в Z индексе
   this.TopMost = false;

    // Показываем кнопку
    buttonStart.Show();
}

Событие buttonStart_Click()

При нажатии кнопки генерируется событие buttonStart_Click(object sender, EventArgs e). Окно программы становится невидимым и пока оно невидимо, изменяется стиль и размер. Запускает таймер процесса цифровой шутки. Для восстановления первоначальных размеров в этом событии происходит запоминание первоначальных размеров окна.

private void buttonStart_Click(object sender, EventArgs e)
{
    // Запоминаем размеры окна.
    rectangleBounds = this.Bounds;

    // Скрываем окно программы-шутки
    this.Hide();

    // Скрываем кнопку.
    buttonStart.Hide();

    // Удаляем рамку вокруг окна.
    this.FormBorderStyle = FormBorderStyle.None;

    // Размер окна должен быть равен размеру экрана в пискелях. 
    this.Bounds = Screen.PrimaryScreen.Bounds;

    // Окно должно быть выше всех,
    // чтобы скрывать всё остальное.
    this.TopMost = true;

    // Запускаем таймер управления видимостью окна. 
    timerProcess.Start();
}

Событие timerProcess_Tick()

Событие timerProcess_Tick(object sender, EventArgs e) генерирует таймер управляющий шутливым процессом. Перед каждым показом окна программы-шутки происходит копирование текущего изображения экрана.

private void timerProcess_Tick(object sender, EventArgs e)
{
    if (this.Visible == false)
    {
        // Копируем экран.
        CopyScreen();

        // Показываем окно, заслоняя им весь экран.
        this.Show();
    }
    else
    {
        // На установленный промежуток времени скрываем окно.
        this.Hide();
    }
}

Событие pictureScreenFake_DoubleClick()

Событие pictureScreenFake_DoubleClick(object sender, EventArgs e) необходимо для остановки программы в момент когда она заслоняет экран копией изображения. Если щелкнуть двойным кликом, то окно программы скроется и таймер запустится заново. Двойной щелчок может произойти, когда пользователь компьютера лихорадочно щелкает по зависшему экрану. Если же двойной щелчок происходит при нажатой клавише Ctrl, то проказница программа остановит свой процесс и покажет себя во всей красе 😁.

/// <summary>
/// Если по развернутому окну сделать двойной щелчок,
/// окно скроется и таймер запустится заново.
/// Если перед двойным кликанием нажать клавишу Ctrl
/// процесс остановится и окно возвратится к первоначальному виду.
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureScreenFake_DoubleClick(object sender, EventArgs e)
{
    if (Control.ModifierKeys == Keys.Control)
    {
        Reset();
    }
    else
    {
        this.Visible = false;
        timerProcess.Start();
    }
}

Сведения об исходнике

Исходник создан в интегрированной среде программирования MS Visual Studio 2019. Исходный код написан на языке C#. В прикреплённом архивном файле содержится исходник программы и сама скомпилированная программа-шутка.

Файл загрузки Размер Кол-во загрузок
JokeScreen.zip 💾 657Кбайт 40