Резидентная программа для Windows
Реферат
Пояснительная записка курсовой работы содержит _16_ страниц, _8_ рисунков,_4_ источника, _1_ приложение.
Ключевые
слова: ПРОГРАММА, РЕЗИДЕНТ, ТРЕЙ,
СКРИНШОТ, ПУТЬ К ПАПКЕ, ТАЙМЕР
В данной курсовой работе рассмотрена программа-резидент, остающаяся в памяти после закрытия окна программы и обозначающая свое присутствие значком в трее.
Цель
работы состоит в разработке программы-резидента,
делающей снимок экрана с заданной
периодичностью и сохраняющая файлы в
выбранной папке.
Оглавление
Введение 5
1. Постановка задачи и ее решение 6
1.1. Формулировка задачи 6
1.2 Спецификация задачи 6
2 Техническая реализация алгоритма решения 6
2.1 Выбор языка и среды программирования 6
2.2 Описание алгоритмов и программы 6
2.3 Описание методов программирования 8
3 Тестирование программы 11
Заключение 13
Список литературы 14
Приложение
А. Листинг программы 15
Введение
Системное программное обеспечение — это комплекс программ, которые обеспечивают эффективное управление компонентами компьютерной системы, такими как процессор, оперативная память, устройства ввода-вывода, сетевое оборудование, выступая как «межслойный интерфейс», с одной стороны которого аппаратура, а с другой - приложения пользователя. В отличие от прикладного программного обеспечения, системное не решает конкретные прикладные задачи, а лишь обеспечивает работу других программ, управляет аппаратными ресурсами вычислительной системы и т.д.
Резидентная программа (или TSR-программа, от англ. Terminate and Stay Resident — «завершиться и остаться резидентной») — в операционной системе MS-DOS программа, вернувшая управление оболочке операционной системы (command.com), либо надстройке над операционной системой (Norton Commander и т. п.), но оставшаяся в оперативной памяти персонального компьютера. Резидентная программа активизируется каждый раз при возникновении прерывания, вектор которого эта программа изменила на адрес одной из своих процедур.
При работе с MS-DOS резидентные программы широко использовались для достижения различных целей (например, русификаторы клавиатуры, программы доступа к локальной сети, менеджеры отложенной печати, вирусы).
По
способу инициализации и вызова
операционной системой резидентные
программы необходимо отличать от «настоящих» драйверов
MS-DOS, встраиваемых операционной системой
в своё ядро
во время загрузки. В эпоху многозадачных
ОС резидентными иногда называют программы,
загруженные постоянно и работающие в
фоновом режиме.
- Постановка задачи и ее решение
- Формулировка задачи
Разработать программу, работающую в фоновом режиме. Программа должна оставаться в памяти после закрытия главного окна и обозначать свое присутствие значком в системном трее. Также программа должна с заданной периодичностью делать снимки экрана и сохранять их в выбранную пользователем папку.
- Спецификация задачи
Входные данные:
- периодичность в секундах;
-
папка для сохранения
Выходные данные:
-скриншоты
- иконка с системном трее
- Техническая реализация алгоритма решения
- Выбор языка и среды программирования
Языком программирования был выбран C#, поскольку он позволяет решать широкий спектр задач, легок в использовании, обладает гибкостью и большим количеством удобных в использовании библиотек. Помимо этого он позволяет использовать как объектно-ориентированный, так и структурный подход.
В качестве среды разработки была выбрана IDE Visual Studio 2010 Express Edition, поскольку она обладает удобным интерфейсом, богатыми средствами для отладки, широко распространена и бесплатна для некоммерческого использования.
- Описание алгоритмов и программы
При запуске программы в системном трее появляется значок. Таймер автоматически не запускается, программа находится в режиме ожидания. Контекстное меню открывается нажатием правой кнопкой мыши по иконке. Меню состоит из следующих пунктов:
- «Настройка» - открывается главное окно программы, в котором можно задать интервал таймера, выбрать папку для сохранения скриншотов, свернуть окно и закрыть программу;
- «Свернуть» - при выборе этого пункта меню сворачивается в трей главное окно программы;
- «Запустить» - запускается таймер, с заданной периодичностью программа делает снимки экрана и сохраняет в выбранную папку. По умолчанию интервал таймера – 5 секунд, а папка сохранения – диск C. В режиме работы таймера нельзя изменить периодичность сохранения скриншотов.
- «Остановить» - остановка таймера, режим ожидания. В этом режиме можно изменить интервал таймера.
- «Выход» - полное закрытие программы
Рисунок
1- Диаграмма состояний и переходов
- Описание методов программирования
Код формы, создание иконки в трее.
public Form1()
{
notifyIcon.Icon = new Icon(ICON_FILE_NAME);
notifyIcon.ContextMenu = CreateMenu();
notifyIcon.Visible = true;
InitializeComponent();
}
Код создания и настройки контекстного меню, запуск и остановка таймера.
ContextMenu CreateMenu()
{
ContextMenu menu = new ContextMenu(new MenuItem[]{
new MenuItem(ITEM_SHOW_WINDOW),
new MenuItem(ITEM_HIDE_WINDOW),
new MenuItem(ITEM_ACTION),
new MenuItem(ITEM_STOP),
new MenuItem(ITEM_EXIT_
menu.MenuItems[1].Enabled = false;
menu.MenuItems[3].Enabled = false;
foreach (MenuItem menuItem in menu.MenuItems)
menuItem.Click += new EventHandler(OnMenuItemClick);
return menu;
}
//Делаем доступным пункт Hide, а пункт Show - запрещаем
protected override void OnLoad(EventArgs e)
{
notifyIcon.ContextMenu.
notifyIcon.ContextMenu.
}
//Делаем доступным пункт Show, а пункт Hide - запрещаем
protected override void OnClosed(EventArgs e)
{
notifyIcon.ContextMenu.
notifyIcon.ContextMenu.
}
//Анализируем какой MenuItem clik'нули и выполняем соответствующее действие
void OnMenuItemClick(object sender, EventArgs e)
{
MenuItem menuItem = sender as MenuItem;
switch (menuItem.Text)
{
case ITEM_SHOW_WINDOW:
ShowDialog();
break;
case ITEM_HIDE_WINDOW:
Close();
break;
case ITEM_STOP:
timer1.Enabled = false;
textBox1.Enabled = true;
notifyIcon.ContextMenu.
notifyIcon.ContextMenu.
break;
case ITEM_ACTION:
inter = Convert.ToInt32(textBox1.Text) * 1000;
timer1.Interval = inter;
timer1.Enabled = true;
textBox1.Enabled = false;
notifyIcon.ContextMenu.
notifyIcon.ContextMenu.
break;
case ITEM_EXIT_APPLICATION:
//Убираем иконку из system tray
notifyIcon.Visible = false;
//Завершаем приложения
Application.Exit();
break;
}
}
Срабатывание таймера, создание и сохранение скриншота.
public string S = "";
public int i = 0;
public string
Ss = "";
private void timer1_Tick_1(object sender, EventArgs e)
{
Screen scr = Screen.PrimaryScreen;
Image img = TakeScreenShot(scr);
img.Save(@""+S+"\\screen" + i + ".jpg", ImageFormat.Jpeg);
i++;
}
Функция создания скриншота
Для хранения изображений в библиотеке GDI+ предназначен класс Image. Его потомки, классы Bitmap и Metafile, реализуют, соответственно, функциональность для работы с растровыми и векторными изображениями. Кстати, в документации .NET Framework SDK утверждается, что потомком Image является и класс Icon, но это не так: он унаследован от System.MarshalByRefObject. В иерархии классов GDI+ для C++ класса Icon не существует (все необходимые средства для работы с иконками находятся в Bitmap).
У
класса Bitmap существует набор перегруженных
конструкторов для создания или
загрузки изображений. При загрузке
содержимого файла
private Bitmap TakeScreenShot(Screen currentScreen)
{
Bitmap
bmpScreenShot = new Bitmap(currentScreen.Bounds.
Graphics
gScreenShot = Graphics.FromImage(
gScreenShot.CopyFromScreen(
return bmpScreenShot;
}
Функции кнопок на форме.
private void button1_Click(object sender, EventArgs e)
{Close();
}
private void button2_Click(object sender, EventArgs e)
{notifyIcon.Visible = false;
Application.Exit();
}
private void button3_Click(object sender, EventArgs e)
{if (folderBrowserDialog1.
{
textBox2.Text
= folderBrowserDialog1.
}
S = textBox2.Text;
}
}
}
- Тестирование программы
Запуск программы: в трее появился значок, главное окно скрыто.
Рисунок 2 - Системный трей
Открываем контекстное меню и разворачиваем окно.
Рисунок 3 - Контекстное меню
Рисунок 4 - Окно программы
Меняем частоту и выбираем путь сохранения файлов.
Рисунок 5 - Выбор папки для сохранения.
Рисунок
6 - Изменение параметров программы
Запускаем таймер и через некоторое время открываем выбранную папку:
Рисунок 7 - Папка со снимками экрана
Рисунок 8 - Папка со снимками экрана через некоторое время
Останавливаем таймер и скриншоты перестают сохраняться в папку.
Программа работает нормально.
Заключение
В
ходе выполнения курсового проекта
была создана резидентная программа,
создающая снимки экрана с заданной
периодичностью и сохраняющая их
в выбранную пользователем
Список литературы
- Системное программное обеспечение / А.В. Гордеев, А.Ю.Молчанов. – СПб.: Питер, 2001. – 736 с.: ил.
- Харт, Джонсон, М. Системное программирование в среде Win32, 2-е изд.: Пер. с англ.: – М.: Издательский дом «Вильямс», 2001.– 464 с.: ил. – Парал. тит. англ.
- У. Моррей, К. Паппас. Создание переносимых приложений для Windows/ Пер. С англ. — СПб.: BHV— Санкт-Петербург, 1997.— 816 с.: ил.
- Сайт http://msdn.microsoft.com
Приложение А. Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using
System.Drawing.Imaging;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
const string ICON_FILE_NAME = "ACDSee.ICO";
const string ITEM_SHOW_WINDOW = "Show window";
const string ITEM_HIDE_WINDOW = "Hide window";
const string ITEM_EXIT_APPLICATION = "Exit";
NotifyIcon notifyIcon = new NotifyIcon();
public Form1()
{
notifyIcon.Icon = new Icon(ICON_FILE_NAME);
notifyIcon.ContextMenu = CreateMenu();
notifyIcon.Visible = true;
InitializeComponent();
int inter = Convert.ToInt32(textBox1.Text) * 1000;