17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
|
|
1 | |
Как корректно завершить чужое приложение?19.11.2008, 01:08. Показов 6525. Ответов 13
Метки нет (Все метки)
Мне надо завершить чужое приложени, чтоб оно типо завершило свои действие сохранило то че надо. Я не имеею хандл это приложение а только имеб proceessID
TerminateProcess убивает сам прочесс не давая ему нормально завкончить работу!
0
|
19.11.2008, 01:08 | |
Ответы с готовыми решениями:
13
Внедрение dll в чужое приложение Как завершить дочернее приложение если родительское было завершено? При получении WM_ENDSESSION Windows не дает корректно завершить программу Как корректно завершить COM порт? |
12 / 12 / 0
Регистрация: 08.10.2008
Сообщений: 105
|
|
19.11.2008, 02:09 | 2 |
Если это приложение, которое надо закрыть, не обрабатывает сообщений windows то корректно его закрыть из внешней программы не получистся. По этому, кстати, при закрытии консоли программы ms-dos из виндовс (нажатием на крестик) она и спрашивает "Завершить процесс ?"
Хандл (дискриптор) может принадлежать окну, но не процессу, а вот окно в свою очередь уже принедлежит процессу с определенным PID'ом. Единственный способ, при котором можно надеятся на корректное закрытие программы - послать всем окнам, принадлежащим процессу, сообщение WM_CLOSE (или в крайнем случае вызвать DestroyWindow(hWnd)). Но это не гарнтия того, что программа закроется корректно, так как можно реализовать код приложения так, что закрыв все его окна оно по-прежнему будет работать. Нет способа гарантирующего корректное закрытие стороннего процесса, т.к. только его разработчик знает в каком случае это произойдет.
0
|
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
|
|
19.11.2008, 02:37 [ТС] | 3 |
А TerminateProcess не можеть послать чтото чтоб оно нармально завершилось, а не убилось(тупо убить!)
Добавлено через 3 минуты 40 секунд Вот еще одна мысля появилась, а как чужому приложения послать сообщение, что типа windows завершает работу, чтоб типа это програ подумала что надо закрываться.
0
|
12 / 12 / 0
Регистрация: 08.10.2008
Сообщений: 105
|
|
19.11.2008, 03:01 | 4 |
нет не может
Это можно, но тут опят же все замыкается на сообщениях windows (WM_ENDSESSION) которые посылаются окнам. Добавлено через 4 минуты 39 секунд В винде все безоконные приложения (кроме драйверов и системных служб - у них другой интерфейс общения) выполняемые в пямяти в момент завершении работы виндовс считаются зависшими и система их просто убивает! Добавлено через 5 минут 44 секунды А в чем собственно проблема? 99% пограмм под винду обрабатывают сообщения и корректно закрываются при получении WM_CLOSE или WM_ENDSESSION.
0
|
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
|
|
20.11.2008, 00:13 [ТС] | 5 |
Собственно у меня нет хендла окна а имееться только proceessID.. и из этого следует как мне твой WM_CLOSE или WM_ENDSESSION послать проге ??? И видимо моя програ которую я пытался закрыть откноситься к 1 % ??
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
20.11.2008, 15:06 | 7 |
GetWindowThreadProcessId.
Короче, перебираешь все окна верхнего уровня (EnumWindows), и, сравнивая известный тебе processID с тем, который вернет вышеупомянутая функция, находишь главное окно приложения-жертвы. Потом просто отправляешь ему сообщение WM_QUIT - вежливо просишь приложение завершить работу подобру-поздорову, а не то!...
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
20.11.2008, 15:41 | 9 |
Как быть в случае, если в процессе - несколько (много) потоков?
0
|
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
|
||||||
22.11.2008, 02:36 [ТС] | 10 | |||||
есть такая вещь
0
|
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
|
|
23.11.2008, 00:14 [ТС] | 12 |
А как это сделать из процесса ид узнать хендл главного окна
0
|
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
23.11.2008, 00:48 | 13 |
20.11.2008, 15:06 - все описано, чего же еще?
Готовый отлаженный код, и еще - на блюдечке с голубой каемочкой? Тогда - сколько платите, сударь?
0
|
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
|
||||||
24.11.2008, 00:48 [ТС] | 14 | |||||
Функцию хотяб скажи
Добавлено через 18 минут 59 секунд Это что типа так чтоли, так с кого тербовать блюдичку с голубой каемочкой ???
Чето всеромно эта вышеуказаный код не работает. Ловит не те окна , ато че надо не находит !
0
|
24.11.2008, 00:48 | |
24.11.2008, 00:48 | |
Помогаю со студенческими работами здесь
14
Как корректно завершить поток Как корректно завершить вывод отчета в Excel? Сокеты и QThread - как корректно завершить поток Как из одной программы корректно завершить другую? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |