Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Создание одноэкземплярного приложения с осложнением...   Найти похожие ветки 

 
Studentik ©   (2005-04-19 21:02) [0]

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

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

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


 
Kind ©   (2005-04-19 21:11) [1]

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


 
Eraser ©   (2005-04-19 21:14) [2]

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;


и всё.


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

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


 
Eraser ©   (2005-04-19 21:41) [4]

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


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

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

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


 
Studentik ©   (2005-04-19 23:23) [5]

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

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


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

Studentik ©

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


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

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


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


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


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


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

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

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

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


 
Studentik ©   (2005-04-20 23:38) [10]

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

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


 
GanibalLector ©   (2005-04-21 01:59) [11]

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


 
Eraser ©   (2005-04-21 11:04) [12]

GanibalLector ©

Не будет.



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.091 c
1-1117178329
Mishenka
2005-05-27 11:18
2005.06.14
Отслеживание изменений содержимого каталога...


1-1116977878
Strech
2005-05-25 03:37
2005.06.14
Шифрование функций


1-1116835140
Nik_Larin
2005-05-23 11:59
2005.06.14
edit и Excel


9-1111131446
Xeno
2005-03-18 10:37
2005.06.14
Как узнать количество полигонов в кадре


1-1116961917
Erick
2005-05-24 23:11
2005.06.14
"is not a valid integer value"