![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание одноэкземплярного приложения с осложнением... [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)
Только Класс создай как можно более уникальный, чтобы никто не повторил :)