PMA
Forum Professor / Завсегдатай форума
Участник № / Member № 1387
отправлено / posted
Добрый день ! При работе МРВ нужно отловить событие когда оператор нажал кнопку остановить МРВ, и выполнить определённую программу. Это необходимо для установки выходных сигналов в исходное состояние. Как можно это сделать ???
Сообщения / Posts 159 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Тогда необходимо останавливать МРВ не через меню, а программно через системную переменную @Exit - смотрите описание в справочной системе. А в графике реализовать оператору кнопку выключения МРВ.
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
PMA
Forum Professor / Завсегдатай форума
Участник № / Member № 1387
отправлено / posted
Использовал переменную @Exit, результат очень странный, предполагалось что произойдёт отключение монитора аналогичное нажатию кнопки на бегущем человеке однако... 1. Остановка происходит вроде бы, но сохраняется работоспособность всех графических элементов, то есть можно открывать - закрывать окна вводить значения. 2. Кнопка с бегущим человеком находится в утопленном состоянии, так как будто монитор запущен.
Пожалуйста дайте более подробное описание того, что происходит при присваивании значени 5 переменной @Exit, в документации очень мало информации.
Сообщения / Posts 159 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Все верно - сервер останавливается, но графика еще работоспособна, она независит от математики. После останова МРВ может быть закрыт штатными средствами (например, Alt+F4). Других способов нет.
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Виталий
Junior Member / Новичок
Участник № / Member № 2118
отправлено / posted
Кстати, в полноэкранном режиме все равно alt+F4 не работает, и смысл в @Exit теряется полностью.
У меня например за машиной сидит "чайник" и для него нажать в полноэкранном режиме с отключенным меню ctrl+f ctrl+r alt+F4 совершенно нереально. Ему надо так - запустил весь проект одной кнопкой (это я по простому на bat сделал) и закрыл одной же кнопкой целиком, т.е. чтобы на экране ничего не осталось и в задачах тоже.
Может быть можно передать среде последовательность нажатых клавиш? Может кто пробовал ActiveX объект сделать, который бы выполнил подобную операцию, или грубо закрыл процесс в диспетчере или еще что от внешнего программирования?
Сообщения / Posts 16 | Из / From: Kazakhstan
| IP / IP: IP адрес / IP address |
отправлено / posted
Подпишусь под каждым словом Виталия. Мне нужно то же самое! Идея была вызвать внешнюю dll, которая найдёт процесс МРВ и добьёт его снаружи. Но пока не писал, всё ещё надеюсь, что ADASTRA Technical Support поможет решить проблему более гуманными способами. Может, в релиз 6.05 добавить такую возможность???? Закрытие программы для чайника?
Сообщения / Posts 23 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Константин Арапов
Forum Member / Участник форума
Участник № / Member № 1998
отправлено / posted
Народ ! Эта тема параллельно обсуждается в разделе "Мониторы Реального Времени / Real Time Monitors".
Разаработчики сказали, что им "необходимо обоснование, в каких случаях и почему необходима остановка (а возможно и полное завершение работы) удалённого узла." И они просят направлять это обоснование на адрес техподдержки hotline2@adastra.ru
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Можно это делать вот так (вариант не оптимален накидал за 5 минут) Пишем на делфи (например) получаем exe теперь если запустить exe то RTM выгрузится полностью. Как запустить внешнее приложение из TM наверное уже все знают. program KillRTM;
begin TheWindow := FindWindow('QWidget', nil); if TheWindow <> 0 then begin GetWindowThreadProcessID(TheWindow, @ProcessID); ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId); TerminateProcess(ProcessHandle,4); end; end.
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Константин Арапов
Forum Member / Участник форума
Участник № / Member № 1998
отправлено / posted
А если речь идет о закрытии NLL? Насколько я понимаю, там вообще никакой мат. обработки нет. И внешнюю программу, насколько я понимаю запустить нельзя...
Сообщения / Posts 32 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
В узле NLL можно использовать программы, а соответственно и внешние библиотеки.
Сообщения / Posts 17321 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Константин Арапов
Forum Member / Участник форума
Участник № / Member № 1998
отправлено / posted
Интересно. Код работает. Возникают два вопроса:
1.Почему именно класс QWidget ? Как Вы определили, можно поинтересоваться ? 2. Не убьем ли мы таким образом какое нибудь другое приложение, имеющее такой же класс ?
Сообщения / Posts 32 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
1) Определил при помощь Spy++ входит в состам Visual Studio. 2) Если запустите более одного раза то можете и убить, например у меня была запушена среда разработки и профайлер, первым запуском вынесло профайлер а второй запуск вынес среду разработки . Это я и имел ввиду говоря о неоптимальности. Просто у меня такая задача не стоит и я с этим не занимался, просто столо интересно и накидал за 5 минут. Ещё как вариант можно написать программку которая в это окно будет посылать нажатия клавишь (Ctrl+R и т.д.). Можно узнать какое окно находится под указателем мыши (получим кнопку на которую нажимаем) подняться по иерархии объектов до главного окна и тогда закроется именно то главное окно где был курсор. Вобщем вариантов море, главное фантазия.
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Константин Арапов
Forum Member / Участник форума
Участник № / Member № 1998
отправлено / posted
Наклепал DLL-ку. Вроде как работает. Вот интересно только КАКИЕ ЕЩЕ приложения эта штука может убить ? Просто я в этих классах окон не секу... То что IDE выбило - фиг с ним, а вот если какое другое приложение... У меня вот куча приложений разных открыто, но вроде как ничего не убилось... Но может быть есть такие приложения ? Если есть, то интересно какие, кроме TM6 IDE ?
Сообщения / Posts 32 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Те приложения графика которых разработана с помощью библииотеки Qt3 (версии могут быть разные). Можно сделать так смотреть есть ли процесс rtm.exe и если есть выполнять код, если нету то не выполнять тем самым вы не убъете остальные приложения.
Сообщения / Posts 106 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Майборода Алексей
Forum Haunter / Завсегдатай форума
Участник № / Member № 1701
отправлено / posted
Ну вот в общем накидал за 15 минут. Теперь она избавлена от указанных недостатков. Убивает именно процесс rtc.exe и ничего более. program KillRTM;
begin hProcessSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0); pe32.dwSize := sizeof(PROCESSENTRY32);
if Process32First(hProcessSnap, pe32) then temp := pe32.szExeFile; if Pos('rtc.exe', temp) <> 0 then begin PID := pe32.th32ProcessID; CloseHandle(hProcessSnap); end else begin pe32.dwSize := sizeof(PROCESSENTRY32); while Process32Next(hProcessSnap,pe32) do begin temp := pe32.szExeFile; if Pos('rtc.exe', temp) <> 0 then begin PID := pe32.th32ProcessID; CloseHandle(hProcessSnap); end; pe32.dwSize := sizeof(PROCESSENTRY32); end; end;
if PID <> 0 then begin ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, PID); TerminateProcess(ProcessHandle,4); end;
amber
Junior Member / Новичок
Участник № / Member № 4553
отправлено / posted
Не появились ли в версии 6.07 штатные (более простые) способы добавить на экран кнопку, по нажатии на которую будет останавливаться / закрываться МРВ?
Сообщения / Posts 20 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |