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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2013, 21:07   #1
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
Сообщение запрет запуска несколько копий + CoolTrayIcon

Здраствуйте, Вы работали с компонентом CoolTrayIcon, если да, по подскажите, как удалить иконку в трее программно, или чтоб иконка не появлялась в трее когда программа запущена и в программе вписано только для одного запуска, тесть запрет на запуск несколько копий программы, когда повторно запускаешь, то в трее рядом с основной иконкой появляется ещё одна, как сделать, чтоб не было так?
beegl вне форума Ответить с цитированием
Старый 04.01.2013, 21:14   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

выполнять проверку второй копии до инициализации Apptication
Человек_Борща вне форума Ответить с цитированием
Старый 04.01.2013, 21:19   #3
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

вот так?
Код:
program Project1;

uses
  Forms,
  Windows,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.RES}

var
  hwnd: THandle;

begin
  hwnd := FindWindow('TForm1', 'Form1');
  if hwnd = 0 then
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end
  else
    SetForegroundWindow(hwnd)
end.
beegl вне форума Ответить с цитированием
Старый 04.01.2013, 21:41   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

да, только искомое окно должно иметь уникальнейший заголовок или имя класса.
Как вариант, создайте пустую форму с уникальным заголовком окна, невидимую.
Человек_Борща вне форума Ответить с цитированием
Старый 04.01.2013, 21:47   #5
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

а как сделать, чтобы
Код:
CoolTrayIcon1.ShowMainForm;
работал, тоесть нажать на кнопку с этим кодом нажать, если программа свернута в трей?

этот код что-то не работает
Код:
//программно нажать на TCheckBox у другого окна, то есть у своего)
procedure CheckCheckBox(hApp: HWND; ClassName: string; bValue: Boolean; CheckBoxNr: Integer);
var
  i: Word;
  hCheckBox: HWND;
begin
  if not IsWindow(hApp) then Exit;
  for i := 0 to CheckBoxNr do
    hCheckBox := FindWindowEx(hApp, hCheckBox, PChar(ClassName), nil);
  if IsWindow(hCheckBox) then
    SendMessage(hCheckBox, BM_SETCHECK, Integer(bValue), 0);
end;

procedure ButtonClicks;
begin
  CheckCheckBox(FindWindow('TForm1', 'instance'), 'TCheckBox', True, 1);
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
CoolTrayIcon1.ShowMainForm;
end;

Последний раз редактировалось beegl; 04.01.2013 в 22:01.
beegl вне форума Ответить с цитированием
Старый 05.01.2013, 12:25   #6
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

подскажите,как развернуть окно если свернуто в трей другим методом что выше?
beegl вне форума Ответить с цитированием
Старый 05.01.2013, 13:03   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

У меня все немного по другому.

В целом это выглядит так.
Первая копия ПО создает MMF файл, размером 4 байта,, и записывает туда HANDLE своего главного окна.

На этом все.

Вторая копия, при запуске, проверяет наличие этого MMF и если он есть, то читает HANDLE и посылает ему сообщение.

Первая копия ловит сообщение и показывает себя на рабочем столе.
Вторая копия закрывается т.к. факт наличия MMF говорит о том, что одна опия ПО запущена, зачем нам две.
Человек_Борща вне форума Ответить с цитированием
Старый 05.01.2013, 13:10   #8
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

У меня сделано mutex'сами и findwindow..
Кольша вне форума Ответить с цитированием
Старый 05.01.2013, 13:57   #9
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
Вопрос

подскажите другой вариант клик в чужом приложении, или как до Application.Run выполнить CoolTrayIcon1.ShowMainForm;, если программа уже запущена?

Последний раз редактировалось beegl; 05.01.2013 в 15:26. Причина: добавил текст
beegl вне форума Ответить с цитированием
Старый 05.01.2013, 16:47   #10
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

попробуйте запустить вторую копию приложения под другим пользователем.запустилась,правда?ва ш код работает только для текущего пользователя.да и использование проверяющих файлов,имхо,неэффективная идея.лучшим вариантом видится использование глобальных мьютексов с уникальным именем в той ее секции инициализации кода.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрет запуска приложений Google[Bot] Безопасность, Шифрование 21 16.01.2013 17:31
Запрет создания нескольких копий элемента Авторитет JavaScript, Ajax 0 18.01.2012 14:58
несколько одновременно работающих копий программы - ? Evgenii Общие вопросы Delphi 3 06.07.2009 09:38
Как запустить несколько копий одной и той же программы? murcot Помощь студентам 4 20.02.2009 11:28