vixiv
1

Я знаю способы как определить, что мое приложение запущено...

07.03.2010, 10:45. Показов 10507. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
знаю как завершить какой-либо процессс...
но как мне сделать такое:
надо определить, что программа уже запущена и завершить этот процесс, а запускаемую копию продолжить выполнять.
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2010, 10:45
Ответы с готовыми решениями:

Не выключается комп, когда запущено мое приложение
Моя программа мешает завершить винду. Когда даешь команду выключиться или перезагрузить компьютер,...

Определить что приложение запущено из сети
Подскажите решение. Как приложению определить что его запустили не с локального ресурса(компьютера)...

Как узнать что приложение запущено?
Как программно узнать что приложение (по пути к exe-файлу) запущено? И если оно уже запущено...

Как определить, запущено ли уже приложение?
Можно ли определить, запущено ли уже приложение???? Возможноли скрыть окно ДОС режима???

6
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
07.03.2010, 11:14 2
Лучший ответ Сообщение было отмечено как решение

Решение

Вот так если нужно продолжить запуск копии, закрыв тот экземпляр, что уже есть
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program Project1;
 
uses
  Forms,
  Windows,
  Messages,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  if FindWindow('TForm1', 'Form1') <> 0 then
    PostMessage(FindWindow('TForm1', 'Form1'), wm_quit, 0, 0);
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
А вот не нужно копию запускать, а продолжать работу с уже запущенным экземпляром
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program Project1;
 
uses
  Forms,
  Windows,
  Dialogs,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  if FindWindow('TForm1', 'Form1') <> 0 then
  begin
    ShowMessage('Экземпляр программы запущен!');
    SetForegroundWindow(FindWindow('TForm1', 'Form1'))
  end
  else
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.
7
13208 / 6596 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
08.03.2010, 08:36 3
Хороший способ с FindWindow, но чтобы он был более правильным, а не таким деревянным:
1. Обозвать главную форму как-то уникально (не TForm1, а как-то в соответсвии с названием программы, например, TMyCoolToolsa)
2. С помощью FindWindowEx() можно найти все окна с указанным именем класса и/или заголовком:
Delphi
1
2
3
4
5
6
wnd := 0;
repeat
    wnd := FindWindowEx(0, wnd, 'TForm1', 'Form1');
    if wnd=0 then break;
    // нашли еще одно окно c хендлом wnd
until false;
3. Если прогу запускаем из-под Delphi, или он запущен сам по себе и в нем открыт этот проект, то через FindWindowEx() будет найдено также дизайнерское окно в Delphi. Рекомендуется не рассылать всем найденным окнам тупо WM_QUIT, а послать им свое сообщение (WM_USER + N), на которое наше же окно должно ответить (например, 42 - оно согласно закрыться, что-то другое - оно не согласно или оно нас не понимает/является подделкой). Следовательно, чтобы узнать ответ, посылать надо не через PostMessage(), а через SendMessage().
4. Можно предусмотреть контроль версий по той же схеме с SendMessage(). Например, новая версия должна завершать старую, но не наоборот. Может сильно пригодится при создании инсталлятора к проге.
2
162 / 76 / 21
Регистрация: 22.04.2012
Сообщений: 221
13.05.2012, 15:12 4
Использую код:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program Project1;
 
uses
  Forms,
  Windows,
  Dialogs,
  Unit1 in 'Unit1.pas' {Form1};
 
{$R *.res}
 
begin
  if FindWindow('TForm1', 'Form1') <> 0 then
  begin
    ShowMessage('Экземпляр программы запущен!');
    SetForegroundWindow(FindWindow('TForm1', 'Form1'))
  end
  else
  begin
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.Run;
  end;
end.
Реакция при ПЕРВОМ запуске программы: сообщение о том, что Экземпляр программы запущен!

Подскажите пожалуйста в чём может быть проблема?

Добавлено через 38 минут
отбой, просто сам проект был открыт
0
13 / 13 / 6
Регистрация: 16.02.2015
Сообщений: 140
03.08.2015, 23:27 5
olegoner, а в каком обработчике ты писал этот код поиска запущенного окна приложения??
0
Модератор
9254 / 6032 / 2379
Регистрация: 21.01.2014
Сообщений: 25,783
Записей в блоге: 3
04.08.2015, 07:35 6
NEFFboy, это не обработчик, это файл проекта (*.dpr), который в среде можно вызвать командой главного меню Project->ViewSource
1
13 / 13 / 6
Регистрация: 16.02.2015
Сообщений: 140
04.08.2015, 09:31 7
Цитата Сообщение от D1973 Посмотреть сообщение
NEFFboy, это не обработчик, это файл проекта (*.dpr), который в среде можно вызвать командой главного меню Project->ViewSource
Спасибо, это правильное решение.
0
04.08.2015, 09:31
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2015, 09:31
Помогаю со студенческими работами здесь

Как убедиться, что приложение с некоторым именем запущено и не висит?
Приложение &quot;A.exe&quot; работает круглосуточно считывая информацию с Com-порта и раздавая её клиентам...

Как переключиться на приложение с некоторым именем убедившись, что оно запущено?
Признаюсь сразу схожая тема здесь :...

Как узнать, что приложение было запущено при помощи NFC метки?
Добрый день, у меня такой вопрос. Как узнать что приложение было запущено при помощи NFC метки?

Определить, запущено ли приложение
Сделано: MainMenu 1.Программа1 2.Программа2 2.Программа3 Когда выбрал кнопка изменила свое...

Проверить, что приложение запущено
Запускаем приложение первый раз, потом оно свернулось... Теперь заново кликаем на значок и вот...

Определить запущено ли приложение из под виртуальной машины
Всем привет. Столкнулся с задачей определить запущено ли приложение из под виртуальной машины....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru