Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2009, 17:37   #1
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию Проверка запущена ли ещё одна копия

Всем доброго времени суток. Есть такой код:
Код:
var
   HM :THandle;
function Check: boolean;
begin
  HM:=OpenMutex(MUTEX_ALL_ACCESS, false, 'Organizer');
  Result:=(HM<>0);
  if HM=0 then HM:=CreateMutex(nil, false, 'Organizer');
end;
begin
  if Check then begin
    ShowMessage('Извините, но одна из копий программы уже запущена.');
    exit;
  end;
  Application.Initialize;
  .................................................................
  Application.Run;
end.
А как мне сделать чтоб при повторном запуске программа не только выводила сообщение, но и разворачивалась из трея? (использую компонент CoolTreyIcon)
TaYgA вне форума Ответить с цитированием
Старый 30.12.2009, 17:48   #2
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Попробуйте послать через SendMessage. Что посылать посмотрите в модуле CoolTrayIcon в разделе, где описан обработчик.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.01.2010, 14:44   #3
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Попробуйте послать через SendMessage.
А можно об этом по подробней... Не совсем ясно
TaYgA вне форума Ответить с цитированием
Старый 03.01.2010, 14:50   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Ищете свою копию:
Код:
H:=FindWindow(Класс окна,Nil);
Потом найденному пошлите сообщение:
Код:
SendMessage(H,...,...,...);
Что бы узнать, что именно посылать найдите функцию, в которой используется команда из CoolTrayIcon, и при нажатом CTRL нажмите на имя процедуры. Откроется модуль CoolTrayIcon. Там Наидите обработчик событий (весь модуль построен на обрабатывании этих сообщений). Он выглядит примерно так:
Код:
Case ... of
WM_... :
WM_... :
...
Точнее не скажу, модуля нет под рукой. Поищите там сообщение, которое отвечает за показ иконки в трее. Пошлите сообщение на удаление иконки. Потом пошлите своему приложению мессагу на показ себя самого.

--------------

Есть другой вариант. Не через мьютексы и окошки. При запуске программы создать запись в реестре или создать файл. При запуске копии проверять наличии записи\файла. Есть - изменяем его содержимое и самоуничтожаем копию. Копия запущенная первой должна по крайней мере раз в 3 секунды проверять содержимое файла или записи и делать то, что там написано. Например Если в файле написано "Hide mode" -Ничего не делать. А если написано "Visible mode" - развернуться из трея.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 03.01.2010 в 14:54.
Alex Cones вне форума Ответить с цитированием
Старый 03.01.2010, 15:21   #5
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Спасибо!!! Буду разбираться
TaYgA вне форума Ответить с цитированием
Старый 03.01.2010, 15:27   #6
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

У меня возник такой вопрос... Как можно написать условие что если программа запущена с exeшника, то выполнить то то действие?! Просто у меня программа запускается ещё при помощи автозагрузки...
TaYgA вне форума Ответить с цитированием
Старый 03.01.2010, 15:32   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Использовать параметры. В автозагрузку поставить ярлык или батник в котором писать например exe.exe -a
А хлопая по значку будет обычный запуск.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 03.01.2010, 15:41   #8
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Спасибо! Буду думать
TaYgA вне форума Ответить с цитированием
Старый 03.01.2010, 16:49   #9
TaYgA
Форумчанин
 
Аватар для TaYgA
 
Регистрация: 24.09.2009
Сообщений: 264
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Использовать параметры. В автозагрузку поставить ярлык или батник в котором писать например exe.exe -a
А хлопая по значку будет обычный запуск.
А можно небольшой примерчик?!
TaYgA вне форума Ответить с цитированием
Старый 03.01.2010, 17:22   #10
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Вот тут смотрите. Рассказывается принцип с примерами.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка запущена ли ещё одна копия приложения Vol666 Общие вопросы Delphi 7 12.10.2009 00:56
ещё одна проблема с программой на Си osichev Помощь студентам 1 07.06.2009 21:40
и ещё одна задачка...9 слонов MiH@N Помощь студентам 4 24.06.2008 00:03