Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364150
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62792)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21320)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21697)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8694)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3463)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20645)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Реферат: Предотвращение запуска 2-x копий программы

Название: Предотвращение запуска 2-x копий программы
Раздел: Рефераты по информатике, программированию
Тип: реферат Добавлен 12:00:28 08 декабря 2005 Похожие работы
Просмотров: 38 Комментариев: 2 Оценило: 0 человек Средний балл: 0 Оценка: неизвестно     Скачать

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

Поиск главной формы (окна)

Чтобы найти копию главного окна можно воспользоваться функцией WinApi - FindWindow. В качестве параметра этой функции передается имя класса окна, которое использовалось при регистрации типа, определяющиего окно формы или в системе окон (WndClass) и заголовка окна. В Дельфи имя оконного класса WndClass совпадает с именем класса формы в Object Pascal (например TForm1). Функция возвращает 0, в случае если окна не существует, либо дескриптор окна, если окно существует. Основной код вашей программы должен быть написан так, что бы программа смогла запуститься, если результат функции FindWindow равен нулю или завершиться в обратном случае. Следующий пример, если вы собираетесь его использовать, нужно вставить в dpr-файл проекта (меню Project - View Source). Пример:

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var

HWnd : THanlde;

begin

HWnd := FindWindow ('TForm1', nil);

if HWnd <> 0 then

if not IsWindowVisible(HWnd) then

PostMessage(HWnd, wm_User, 0, 0);

SetForegroundWindow (HWnd)

else

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

//если в программе несколько форм, то создайте их здесь

//вручную, например Application.CreateForm(TForm2, Form2)

Application.Run;

end;

end.

Разъясню код по строчкам. В первых двух строках я объявил переменную HWnd типа THandle для хранения результата работы функции. Далее записываю результат выполнения функции FindWindow в переменную HWnd. Затем сравниваю результат: если он не равен нулю (т.е. программа уже запущена и данный экземпляр является копией) активизирую главную форму запущенного приложения. В обратном случае выполняю операции по инициализации, создания форм и запуска программы.

Однако при использовании этого кода могут возникнуть некоторые проблемы. Учтите, что если вы запустите программу в то время, когда работает дельфи с открытым в ней проектом запускаемого приложения, то программа вообще не запустится. Это связано с тем, что в системе уже существует форма с сответствующим классом в конструкторе дельфи. Однако вы сможете запустить программу, если закроете в дельфи файл юнита, связанного с формой, и саму форму (или лучше вообще весь проект). Если же вы просто закроете форму в конструкторе дельфи, то окно не уничтожится, а будет скрыто и так же будет существовать в системе. Поэтому встраивать этот код лучше на этапе завершения работы над программой.

Использование мьютексов

Mutex - это сокращение от mutual exclusion (взаимное исколючение). Это наиболее традиционный подход для среды Win32. Вообще мьютекс обычно используют не для нахождения копии программы, но этот объект можно приспособить и для этой цели. Мьютекс поддерживается на уровне ОС и его специфика такова, что мьютекс с заданным именем может принадлежать только одному приложению, либо никому. После того, как программа создала мьютекс, она может проверить, принадлежит ли этот объект какой либо программе. Для проверки используется функция WinApi - WaitForSingleObject. Если в момент обращения к этой функции мьютекс принадлежит кому либо, то функция ждет определенное количество времени (передается в качестве параметра) до освобождения мьютекса (если мьютекс не будет освобожден то функция возвратит ошибку с кодом wait_TimeOut). А если мьютекса не существует (т.е. основная программа не запущена), то программа становится владельцем мьютекса. Реализация такого подхода показана в следующем примере:

program Project1;

uses

Windows,

Forms,

Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

var

hMutex : THandle;

begin

hMutex := CreateMutex(nil, False, 'UniqueProgrammMutex');

if WaitForSingleObject(hMutex, 0) <> wait_TimeOut then

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end;

end.

Этот метод является безусловно надежнее предыдущего. Единственный недостаток этого метода - это то, что при запуске копии программы главное окно запущенного приложения не активируется, хотя это легко можно исправить путем поиска главного окна в списке окон либо с помощью описанной функции FindWindow.

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Где скачать еще рефератов? Здесь: letsdoit777.blogspot.com
Евгений22:32:58 18 марта 2016
Кто еще хочет зарабатывать от 9000 рублей в день "Чистых Денег"? Узнайте как: business1777.blogspot.com ! Cпециально для студентов!
14:41:29 24 ноября 2015

Работы, похожие на Реферат: Предотвращение запуска 2-x копий программы

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

Да, в любом случае.
Да, но только в случае крайней необходимости.
Возможно, в зависимости от цены.
Нет, напишу его сам.
Нет, забью.



Результаты(151194)
Комментарии (1843)
Copyright © 2005-2016 BestReferat.ru bestreferat@mail.ru       реклама на сайте

Рейтинг@Mail.ru