![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как, зная имя EXE, определить Handle окна этой программы [D7, WinXP]
dreamse © (2008-02-03 18:57:00)Нужно определить хендл окошка, зная его EXE и полный путь
ketmar (2008-02-03 20:29:00) [1]>[26] dreamse (03.02.08 20:20)
да чего тут думать? при такой постановке молиться надо. не садись ты за баранку этого тарантаса, нервы крепче будут. %-)
dreamse (2008-02-03 20:20:00) [2]> ketmar © (03.02.08 20:08) [25]
:)
Будем думать.
ketmar (2008-02-03 20:08:00) [3]>[24] dreamse (03.02.08 19:55)
а сервис, зараза, не реагирует, например, на команду останова. а при убивании его винда перезапускает. или вообще пытается себя восстановить.
да мало ли… неужели я тебя ещё не напугал? тогда можем сместиться в сторону драйверов, например. %-)
dreamse (2008-02-03 19:55:00) [4]> ketmar © (03.02.08 19:48) [23]
Этот вариант уже учтен, будет список с именами сервисов, соответственно если Exe файл в зависимости от списка ( имя файла, MD5 и пр. ) является сервисом то мы его останавливаем и деинстлируем, после обновления запускаем и инсталлируем повторно
/Install
/Uninstall
ketmar (2008-02-03 19:48:00) [5]>[21] dreamse (03.02.08 19:46)
тогда тебя и убивалка не спасёт. а проект чужой взял — и воткнул сервис, например. а сервису прописал флажок «авторестарт при падении». ты сервис пришиб (и то если прав хватило), а винда перезапустила тут же. опа?
у тебя в итоге получится по заглушке на каждую интересную софтину. ужос. беги от этой задачи, пока не поздно.
dreamse (2008-02-03 19:48:00) [6]> Сергей М. © (03.02.08 19:44) [20]
1. получаем список всех окон
2. получаем Id интересующего нас процесса
3. Перебираем все окна и отправляем сообщение о закрытии каждому окну ( или первому ) на закрытие если его породил наш процесс
dreamse (2008-02-03 19:46:00) [7]> ketmar © (03.02.08 19:43) [18]
Пытаюсь сразу убить двух зайцев, делаю как бы универсальную обновлялку для всех проектов. + так же для тех проектов где вообще не предусматриваться обновление ( например сторонние проекты, обновление для которых получаются по Email) . Так что внедрить реакцию на события во все приложения не представляться возможным :(
Сергей М. (2008-02-03 19:44:00) [8]
> придеться писать свою обработку
Обработку чего?
Удовлетвори уж любопытство "рассуждающей общественности")
ketmar (2008-02-03 19:44:00) [9]>[17] Сергей М. ©(03.02.08 19:42)
ну, поскольку автор убивает именно окна, я предположил, что окна есть. %-)
ketmar (2008-02-03 19:43:00) [10]>[14] dreamse (03.02.08 19:40)
>просто думал что есть готовый вариант какой то, придеться писать свою
>обработку.
учитывая, что твой метод несколько… хм… неверный — готовых решений нет. руками, всё руками. для готовых «без боли» таки меняй логику.
Сергей М. (2008-02-03 19:42:00) [11]
> ketmar © (03.02.08 19:39) [13]
Бродкаст м.б. и хорош, если целевые процессы создают хотя бы одно в/у окно. А если нет ? А если целевой процесс, к тому же, есть сервис-процесс ? Прежде чем принимать решение, нужно четко представлять, какие ингредиенты возможны в этой солянке сборной)
ketmar (2008-02-03 19:42:00) [12]натурально, не правильно. нас же дети читают, увидят такое решение и скопируют ещё, не приведи Бафомет.
dreamse (2008-02-03 19:41:00) [13]Ваши предложения несоменно правильнее. но на данном этапе сделаю все просто.
Спасибо всем за участие в обсуждении.
dreamse (2008-02-03 19:40:00) [14]Как обычно пустились в рассуждения на тему правильно ли делает автор или нет ...
Я знаю как сделать, нужно тупо вывести список окон и перебрать их при этом получая Id процесса через GetWindowThreadProcessId
просто думал что есть готовый вариант какой то, придеться писать свою обработку.
Всем спасибо.
ketmar (2008-02-03 19:39:00) [15]кстати, не надо событий, я поторопился. достаточно RegisterWindowMessage() и броадкаста. %-)
Сергей М. (2008-02-03 19:34:00) [16]
> написанные другими программистами модули
Ты бы сначала о своих модулях позаботился)
> Есть варианты по мягкому обновлению программного обеспечения
> ?
Если рассматривать все модули "скопом" (без разбору, свои или чужие), универсального варианта нет - каждый разработчик творит в своих алгоритмах все что ему вздумается. Одни приложения вполне адекватно реагируют на WM_CLOSE, другие плюют на него с высокой колокольни.
ketmar (2008-02-03 19:30:00) [17]>[9] dreamse (03.02.08 19:26)
>В дистрибутива могут входить не только мои приложения, но и так же
>дополнительно написанные другими программистами модули.
кого волнует? стандартизируется некоторая реакция на некоторые собития, и всё. кто реакции не делает — тому больно бить по лицу и зарплате.
ketmar (2008-02-03 19:29:00) [18]>[7] dreamse (03.02.08 19:15)
обалдеть.
посмотри в сторону event'ов, например. махнул ивентом — все схлопнулись. красиво, удобно, и не надо заниматься непонятными поисками.
dreamse (2008-02-03 19:26:00) [19]> Сергей М. © (03.02.08 19:18) [8]
В дистрибутива могут входить не только мои приложения, но и так же дополнительно написанные другими программистами модули.
Ничего изуверского не вижу :) Есть варианты по мягкому обновлению программного обеспечения ? Я с удовольствием выслушаю более опытного в этом плане коллегу.
Сергей М. (2008-02-03 19:18:00) [20]
> нужно свои программы запущенные завершать
Таким изуверским способом ?!
Это же твоипрограммы)
А раз они твои, то что мешает "научить" их реагировать нужным образом, к примеру, на некое предопределенное тобой сообщение ?