View previous topic :: View next topic |
Author |
Message |
MVV
Joined: 15 Oct 2009 Posts: 4811 Location: Ростов-Дон
|
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri Mar 11, 2011 16:21 Post subject: |
|
|
MVV
Меня устроит. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1274
|
(Separately) Posted: Thu Mar 17, 2011 12:54 Post subject: |
|
|
HA3APET
Закрытие дерева сделал. Но поможет ли это - не знаю. Протестировал на Camper, его значок у меня остается и при закрытии дерева плагином, и при помощи taskkill /T.
1.4.9.3 beta |
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Sat Mar 19, 2011 19:23 Post subject: |
|
|
Loopback
Не помогло. На Camper не стоит тестировать, очень кривая программка к сожалению (не в обиду D1P). А вот TCamper отлично уничтожается через taskkill /T, по-экспериментируйте на нём. Судя по тестам, получается сейчас ваш ключ /TT не есть аналог taskkill /T... |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1274
|
(Separately) Posted: Sat Mar 19, 2011 20:07 Post subject: |
|
|
HA3APET
Было бы что тестировать... Ключ делает то, что можно почерпнуть из описания соответствующего ключа taskkill: "Завершение указанного процесса и всех его дочерних процессов". Возможно, он не повторяет полностью его внутреннюю реализацию.
Я рекурсивно прохожу по процессам, проверяя принадлежность каждого к родительскому процессу. Даже не знаю, что тут можно еще выдумать. |
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Sat Mar 19, 2011 20:20 Post subject: |
|
|
Loopback
Я в программировании ноль, кроме тестирования ничем помочь не могу.
Вот например у известной консольной утилитки nircmdc есть два похожих параметра:
closeprocess
killprocess
Первый из них корректно завершает процесс и иконка из трея исчезает
Второй убивает процесс, в трее иконка остаётся.
Вот по этой аналогии хочется, что бы ваш плагин умел завершать процесс, а не убивать его. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1274
|
(Separately) Posted: Sat Mar 19, 2011 22:49 Post subject: |
|
|
HA3APET wrote: | Вот например у известной консольной утилитки nircmdc есть два похожих параметра:
closeprocess
killprocess
Первый из них корректно завершает процесс и иконка из трея исчезает
Второй убивает процесс, в трее иконка остаётся. |
Ну, собственно, тут всё логично. Я уже писал, что можно попытаться закрыть процесс корректно с помощью сообщения окну, что closeprocess и делает. Можно добавить такой код, но тут встают некоторые проблемы.
Во-первых, у приложения может быть несколько форм. Если в обычных можно найти ту, у которой нет родителя, то у программ на дельфи сложно надежно определить, какая форма "главная". Можно попытаться посылать сообщения всем подряд, но не знаю, во что это может вылиться.
Во-вторых, окно в силу разных обстоятельств может не отреагировать на сообщение закрытия, или отреагировать с большой задержкой. Чтобы не зависнуть навечно, придется вводить некий таймаут. Если окно не закроется за время таймаута, придется его убить, и иконка опять может остаться. При этом, если таких приложений окажется несколько, закрытие тотала может затянуться. |
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Sat Mar 19, 2011 23:10 Post subject: |
|
|
Loopback
Вы ввели два параметра для закрытия - T и TT, так пусть один убивает, а другой пытается закрыть. А пользователь сам выберет, что предпочтительнее с конкретной программой. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1274
|
(Separately) Posted: Sat Mar 19, 2011 23:23 Post subject: |
|
|
HA3APET wrote: | Вы ввели два параметра для закрытия - T и TT, так пусть один убивает, а другой пытается закрыть. А пользователь сам выберет, что предпочтительнее с конкретной программой. |
Нет, второй уже закрывает дерево, что тоже может быть полезным. Тогда уж лучше ввести дополнительный параметр, сообщающий, что нужно попробовать закрыть окна. Разумеется, в этом случае могут быть задержки.
Например, так:
/W - пробовать закрыть окна. Стандартный таймаут 1000 мс.
/W1234 - то же самое, но с произвольно заданным таймаутом. |
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Sat Mar 19, 2011 23:57 Post subject: |
|
|
Loopback
отлично, буду ждать решения. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1274
|
(Separately) Posted: Sun Mar 20, 2011 01:40 Post subject: |
|
|
Ну вот, сейчас вроде всё как ожидалось работает (/TT /W). Правда, тестировал только на Camper - единственном, с чем у меня наблюдались проблемы.
1.4.9.3 beta |
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Sun Mar 20, 2011 02:50 Post subject: |
|
|
Loopback
Да всё отлично, для одной программы.
Но если прописать 2 программы
Code: | ShellExec /TT /W "Camper.exe" "" "%commander_path%\Camper\"
ShellExec /TT /W "AUTOFx.exe" "" "%commander_path%\autofx\" |
то первая убивается (Camper), а вторая завершается. Если поменять местами
Code: | ShellExec /TT /W "AUTOFx.exe" "" "%commander_path%\autofx\"
ShellExec /TT /W "Camper.exe" "" "%commander_path%\Camper\" |
То опять первая убивается (AUTOFx), значёк остаётся, а вторая завершается и значка нет. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1274
|
(Separately) Posted: Sun Mar 20, 2011 11:36 Post subject: |
|
|
HA3APET
AUTOFx это что? Дай ссылочку, потестирую. |
|
Back to top |
|
|
HA3APET
Joined: 22 Feb 2010 Posts: 151
|
(Separately) Posted: Sun Mar 20, 2011 16:53 Post subject: |
|
|
Loopback
AUTOFx - после запуска, можно будет в TC вызывать программу-редактор или просмотрщик удерживая левую кнопку мыши на файле, переключаться между F3 и F4 по средней кн мыши. |
|
Back to top |
|
|
Loopback
Joined: 07 Sep 2009 Posts: 1274
|
(Separately) Posted: Sun Mar 20, 2011 19:28 Post subject: |
|
|
Какая-то бредовая ситуация получается Почему-то PID процесса, который получаю из члена hProcess структуры, передаваемой в ShellExecuteEx, получается не такой, который виден в диспетчере задач. Пробовал аж тремя различными способами. При этом hProcess однозначно правильный - процессы на выходе по нему убиваются.
Если запускать процесс с помощью CreateProcess, PID получается правильный. Но в этом случае теряется возможность запустить документ.
В чем дело неясно совершенно. В общем, если решение проблемы не найдется, придется эмулировать работу с документами с помощью FindExecutable или AssocQueryString. Но вряд ли получится это сделать полноценно. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|