Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизСоздание одноэкземплярного приложения с осложнением... Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c