Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание одноэкземплярного приложения с осложнением... [D7, WinXP]


Studentik ©   (2005-04-19 21:02:00) 

Здравствуйте, Мастера!
Необходимо создать одноэкземплярное приложение. Нашел предложение использовать функцию вида:

if FindWindow('TForm1', 'Заголовок программы') <> 0 then Application.Terminate;

А если 'Заголовок программы' меняется во время выполнения программы, хотя бы так:
'Заголовок программы - 1'
'Заголовок программы - 2'
....
'Подведение итогов'
А надо их всех отлавливать! В уме крутится, что код должен содержать следующее:
if (Pos('Заголовок программы', Form1.Caption) <> 0) or (Form1.Caption='Подведение итогов') then ...
Как воплотить этот вариант? А может есть другое решение!?


Eraser   (2005-04-21 11:04:00) [1]

GanibalLector ©

Не будет.


GanibalLector   (2005-04-21 01:59:00) [2]

Только Вы совсем забыли о CloseHandle.
А ведь без этого утечка будет...Не хорошо.


Studentik   (2005-04-20 23:38:00) [3]

To Игорь Шевченко
О функции CreateMutex слышу впервые, и F1 такой не знает!!!

To Eraser
Просто cool! Спасибо.
Тема закрыта!!!


Игорь Шевченко   (2005-04-20 00:48:00) [4]


> Я в .dpr вставил приведенный код, но компилиться он не стал.
> Может какие библиотеки подключить надо?


Я надеюсь, по F1 ты уже поискал ?


Eraser   (2005-04-20 00:48:00) [5]

Добавь в uses модуль windows, и в ф-ии

MessageBox(0, PChar('Already EXISTS!'), SApplicationName, MB_ICONERROR);

замени параметр SApplicationName на что-то вроде PChar('Error')


Studentik   (2005-04-20 00:29:00) [6]

To Eraser
Я в .dpr вставил приведенный код, но компилиться он не стал. Может какие библиотеки подключить надо? Матюкается на неизвестную функцию CreateMutex...


Eraser   (2005-04-20 00:02:00) [7]

Studentik ©

Всмысле как работает? ))
Не видно разве? - создаётся именованый мьютекс, если мьютекс существует (экземпляр программы уже запущен), программа закрывается.


Studentik   (2005-04-19 23:23:00) [8]

To Eraser
Задача, действительно, сводится к "предотвратить повторный запуск одного и того же приложения"
Как работает приведенный код?

To Kind
Имеется в виду - тупо создать новый класс наследник TForm, ничего не переопределять и назавать его помудренней?


Eraser   (2005-04-19 21:41:00) [9]

Pa5ha
а если прога вылетает?


Что значит "вылетает"?

Вообще это ([3]) к чему?

Я так понял здача- предотвратить повторный запуск одного и того же приложения...


Pa5ha   (2005-04-19 21:36:00) [10]

Eraser, а если прога вылетает? У нас один крендель прогу написал, другой нашел глюк, все решили у себя посмотреть и в результате весь класс пришлось перезагружать :)


Eraser   (2005-04-19 21:14:00) [11]

Studentik ©

Варварский метод...
Всё гораздо проще. При инициализации приложения, в файле dpr, перед Application.Initialize; впиши следующие строки


   CreateMutex(nil, True, 'My Super Cool proga!!!');
   if GetLastError = ERROR_ALREADY_EXISTS then
   begin
     MessageBox(0, PChar('Already EXISTS!'), SApplicationName, MB_ICONERROR);
     Halt;
   end;


и всё.


Kind   (2005-04-19 21:11:00) [12]

Проверяй только по Классу FindWindow('TForm1', nil)
Только Класс создай как можно более уникальный, чтобы никто не повторил :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо