Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
1

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

29.09.2018, 10:46. Показов 1280. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приложение "A.exe" работает круглосуточно считывая информацию с Com-порта и раздавая её клиентам по локальной сети. Может пройти 20-25 суток непрерывной работы и вдруг вываливается сообщение:
"прекращена работа программы"
Сигнатура проблемы:
Имя события проблемы: BEX
...
Система Windows7 Prof.
Почитав в интернете предпринял все рекомендуемые действия (Параметры быстродействия->Предотвращение выполнения данных-> добавил свою программу в исключения DEP, убедился в отсутствии в системе вирусов), результат - тот же. Проходит несколько недель, приходишь на работу - программа висит. Как отследить такую ошибку пока не знаю. Задумал паралельно держать запущенной программу "B.exe", которая отслеживала бы работу программы "A.exe". Как узнать запущено ли приложение с указанным именем я нашёл здесь https://www.cyberforum.ru/post665838.html
но как узнать что программа висит?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.09.2018, 10:46
Ответы с готовыми решениями:

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

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

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

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

10
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
29.09.2018, 10:57 2
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Можно попробовать IsHungAppWindow, если "висит" == "not responding".
2
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
29.09.2018, 12:30  [ТС] 3
volvo, HWND ищем с помощью FindWidow?

Добавлено через 33 минуты
volvo,

Не по теме:

до сегодняшнего дня думал что мой Барсик бирманский, и тут наткнулся на Ваше сообщение что и Ваша кошка бирманская, но ведь они абсолютно разные!

0
volvo
29.09.2018, 12:34
  #4

Не по теме:

Цитата Сообщение от jkrnd Посмотреть сообщение
кошка бирманская
У меня кошка британская, если что, и я уже писал об этом...

0
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
29.09.2018, 12:43  [ТС] 5
volvo,

Не по теме:

извините перепутал. А кошка красивая :)

0
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
01.10.2018, 10:04  [ТС] 6
volvo, после разъяснения по HWND попробовал применить функцию IsHungAppWindow. Мой буилдер её не знает.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.10.2018, 10:16 7
А самому получить указатель на функцию через hlib = GetModuleHandle("user32.dll") + GetProcAddress(hlib, "IsHungAppWindow") - никак нельзя?
1
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
01.10.2018, 10:21  [ТС] 8
Цитата Сообщение от volvo Посмотреть сообщение
получить указатель на функцию через hlib
я не знаю как. Куда вставить Вашу инструкцию?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.10.2018, 10:29 9
Туда, где будет вызываться нужная функция, непосредственно перед ее вызовом.
0
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
01.10.2018, 10:37  [ТС] 10
так:
C++
1
2
3
    HWND w = find_main_window(GetPIDbyName(LabeledEdit2->Text.c_str()));
    hlib = GetModuleHandle("user32.dll") + GetProcAddress(hlib, "IsHungAppWindow")
    Label2->Caption = IntToStr(IsHungAppWindow(w));
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
01.10.2018, 11:24 11
C++
1
2
3
4
5
6
7
    typedef BOOL (WINAPI *PROCISHUNGAPPWINDOW) (HWND);
    HWND w = find_main_window(GetPIDbyName(LabeledEdit2->Text.c_str()));
 
    HMODULE hlib = GetModuleHandle("user32.dll");
    PROCISHUNGAPPWINDOW IsHungAppWindow = (PROCISHUNGAPPWINDOW)GetProcAddress(hlib, "IsHungAppWindow");
 
    Label2->Caption = IntToStr(IsHungAppWindow(w));
2
01.10.2018, 11:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2018, 11:24
Помогаю со студенческими работами здесь

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

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

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

Как узнать где запущено приложение?
Привет, подскажите мне как узнать где запущено мое приложение, на локальном сервере Tomcat или на...


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

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