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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2018, 17:17   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Открыть программу при повторном клике по ярлыку

На рабочем столе есть ярлык программы. При двойном клике по ярлыку программа запускается и показывает свой интерфейс и это правильно.
Как сделать, чтобы при повторном двойном клике по ярлыку уже запущенная программа снова показала свой интерфейс?
Например, программа свёрнута на панели задач или закрыта в трей
Shouldercannon вне форума Ответить с цитированием
Старый 15.08.2018, 17:33   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,730
По умолчанию

Стандартно. При запуске проверяете наличие Мьютекса/Евента/Файла/.... Если есть, посылаете главной копии сообщение, а сами закрываетесь. Если нет, то создаете и работаете.
p51x вне форума Ответить с цитированием
Старый 15.08.2018, 17:33   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,325
По умолчанию

Не проверял (нет под рукой Дельфи), но выглядит крайне правдоподобно (код взят ОТСЮДА):
Код:
var
  Semafor: THandle;

procedure RestoreWindow(aFormName: string);
var
  Wnd,
  App: HWND;    
begin
  Wnd := FindWindow(PChar(aFormName), nil);
  if (Wnd <> 0) then 
  begin { Set Window to foreground }
    App := GetWindowLong(Wnd, GWL_HWNDPARENT);
    if IsIconic(App) then 
      ShowWindow(App, SW_RESTORE);

    SetForegroundwindow(App);
  end;
end;

begin
  { Don't start twice ... if already running bring this instance to front }
  Semafor := CreateSemaphore(nil, 0, 1, 'MY_APPLICATION_IS_RUNNING');
  if ((Semafor <> 0) and { application is already running }
     (GetLastError = ERROR_ALREADY_EXISTS)) then 
  begin
    RestoreWindow('TMyApplication');
    CloseHandle(Semafor);
    Halt;
  end;

  Application.CreateForm(....);    
  Application.Initialize;
  Application.Run;
  CloseHandle(Semafor);
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.12.2018, 00:36   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Не работает
Shouldercannon вне форума Ответить с цитированием
Старый 08.12.2018, 07:57   #5
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,451
По умолчанию

много способов: По умолчанию запуск копии программы [Delphi7]

например: код из OneInstancesEx.rar (6.8 Кб) компонент

Цитата:
procedure _ShowWindow(Hnd: Integer);
begin
if IsIconic(Hnd)
then ShowWindow(Hnd, Sw_Restore);

SetForegroundWindow(Hnd);
BringWindowToTop(Hnd); // поверх всех окон
end;
добавить в событие OnReceiveCmdLine компонента OneInstancesEx.rar (6.8 Кб)

Код:
procedure TForm1.OneInstancesEx1ReceiveCmdLine(Sender: TObject;
  fromInstance: TInstanceInfoIn; Parameters: TStrings);
begin
 CoolTrayIcon1.ShowMainForm; // //вытаскивает из трея
 SetForegroundWindow(Application.Handle); // на передний план
 BringWindowToTop(Application.Handle); // поверх всех окон
end;
end.

Последний раз редактировалось beegl; 08.12.2018 в 09:00. Причина: add text
beegl вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать кнопку при нажатии показывался объект, при повторном нажатии пропадал. nyqpblcTuk Microsoft Office Excel 3 31.08.2017 14:32
Ошибка при повторном вызове хранимой процедуры. dimorik PHP 12 10.11.2013 21:40
Ошибка при повторном Insert после CancelUpdates Romowski БД в Delphi 12 06.02.2013 14:44
Нужно при двойном клике на строку listView открыть другую форму и передать даные в текстбоксы из txt vitiok1 C# (си шарп) 5 17.02.2012 19:16
Перекрытие вариабл при повторном вызове функции KOTBASILIO JavaScript, Ajax 0 18.07.2011 19:09