![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
запуск только одной копии приложения [D7, XP]
Chuk & Gek © (2006-12-18 17:47:00)Помогите пожалуйста!
Где-то на компе была информация, но найти не могу...
Лёгкий вопрос:как реализовать запуск только одной копии приложения, т.е. чтобы если программа запушена, то еще одну запустить было нельзя
Спасибо.
orinoko (2007-01-02 10:46:00) [1]Я делаю так у себя и все довольны:
procedure TForm1.FormCreate(Sender: TObject);
var S: string;
PrevInstWind: HWND;
begin
//Проверяем, не запущено ли уже приложение
//Запоминаем заголовок
s:=Application.Title;
//Меняем на что-то другое, чтоб FindWindow его не нашла
Application.Title:='runonce'+s;
//Ищем окно с заголовком приложения
PrevInstWind:=FindWindow(nil,pchar(s));
if PrevInstWind<>0 then
//Если нашли, то ...
begin
//Запрещаем показ главной формы
Application.ShowMainForm := false;
//Завершаем текущее приложение
Application.Terminate;
//Активизируем предыдущую копию
if IsIconic(PrevInstWind)
then
ShowWindow(PrevInstWind,SW_RESTORE)
else
SetForegroundWindow(PrevInstWind);
//Завершаем процедуру
exit;
end;
//Восстанавливаем заголовок
Application.Title:=s;
//дальше пишешь что там у тебя по OnCreate должно быть
// ...
// ...
end;
Всё просто и без всяких изысков
Правильный Вася (2006-12-28 22:15:00) [2]
> Mickey74 © (28.12.06 21:28) [34]
с себя начни
Mickey74 (2006-12-28 21:28:00) [3]Люди!!!
А нафига вообще на форум заходить если человеку подсказать нормально не можете???
Loginov Dmitry (2006-12-19 17:49:00) [4]> но на эту функцию нету в хелпе данных
См. Windows SDK
Anatoly Podgoretsky (2006-12-19 13:11:00) [5]> RightD (19.12.2006 12:23:29) [29]
> Спасибо, но на эту функцию нету в хелпе данных
Неправда
novill (2006-12-19 12:31:00) [6]Это апи функция. Описана в мсдне.
Данные есть (Д6).
Ega23 (2006-12-19 12:30:00) [7]Не там ищешь.
Поставь на неё курсор и нажми F1
RightD (2006-12-19 12:23:00) [8]Спасибо, но на эту функцию нету в хелпе данных
Ega23 (2006-12-19 12:17:00) [9]Windows?
RightD (2006-12-19 12:08:00) [10]Простите, а в каком модуле хранится CreateMutex?
Правильный Вася (2006-12-18 20:55:00) [11]да-а, чукча писатель, мыслитель
Chuk & Gek (2006-12-18 19:46:00) [12]Спасибо
Loginov Dmitry (2006-12-18 19:19:00) [13]begin
CreateMutex(nil, False, PChar(SStartMutexName));
if GetLastError = ERROR_ALREADY_EXISTS then Halt;
....
end;
Ega23 (2006-12-18 19:04:00) [14]При старте проверяешь систему на наличие именованого Mutex. Если есть - выходишь, если нет - создаёшь именованый Mutex.
Chuk & Gek (2006-12-18 19:02:00) [15]To Ega23: У меня тоже MainForm всегда. Это правило:) это я просто создал пновое приложение просто чтобы хотя бы сделать эту штуку. У меня на форме даже каждай Label переименован!!!
To Virgo Style: недоволен тем, что не работает!!!:)
Ну ладно спасибо всем помогли чем могли!!! модератор, закрывай ветку!
Virgo_Style (2006-12-18 18:59:00) [16]Chuk & Gek © (18.12.06 18:41) [19]
Точно, только не вырубает, а вырубается, ну и чем же ты недоволен?)
Ega23 (2006-12-18 18:53:00) [17]А если она у меня называется MainForm ? У меня главная форма так во всех моих проектах называется. получается, что мои программы - как Кристофер Ламберт : "Должен остаться только один!"
Chuk & Gek (2006-12-18 18:41:00) [18]Он ищет все проги с класом TForm1 и любым заголовком и если не 0 то вырубает...
Virgo_Style (2006-12-18 18:35:00) [19]Chuk & Gek © (18.12.06 18:15) [9]
if FindWindow('TForm1', Nil)0 then Application.Terminate;
Как ты думаешь, что здесь написано?
Gero (2006-12-18 18:34:00) [20]> [16] Chuk & Gek © (18.12.06 18:33)
> Если бы знать что это такое
Не расстраивайся, придет время, когда ты научишься пользоваться справкой и поисковыми системами, тогда ты сможешь узнать.