Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.04 c
4-1114076923
murk2
2005-04-21 13:48
2005.06.14
Как убрать кнопку окна из панели задач?


4-1114191285
Killer-App
2005-04-22 21:34
2005.06.14
WindowsXP-Выключение


1-1116855526
Viktop
2005-05-23 17:38
2005.06.14
Процедура для каждого элемента TreeView


1-1117101129
P.N.P.
2005-05-26 13:52
2005.06.14
Форма в ScrollBox и OnKeyDown


3-1115707010
GreatMaster
2005-05-10 10:36
2005.06.14
ADO+dbf - не понимает кодировки 1251?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский