|
|
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Сори за детский вопрос - как программно закрыть приложение из дельфи? Мы запускали его не из дельфи, и никаких данных о нем (заголовок окна и прочее) - не знаем. Знаем тока путь к исполняемому файлу. Нашел вот такой код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Но чото как то он у меня не работает, возможно потому что у меня Windows 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2012, 00:44:57 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Всем спасибо, вот решение SendMessage(FindWindow('ConsoleWindowClass', nil), WM_CLOSE, 0, 0); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2012, 01:03:11 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
DebusenВсем спасибо, вот решение SendMessage( FindWindow ('ConsoleWindowClass', nil), WM_CLOSE, 0, 0);теперь запустите четыре таких приложения ('ConsoleWindowClass') и закройте только второе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2012, 02:05:27 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Особенно "порадовало" Код: pascal 1. 2. 3. Ведь черным по белому написано Debusen, обратите внимание на Синтаксис и Замечания TerminateProcess vs ExitProcess ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2012, 02:23:45 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
GatorОсобенно "порадовало" Код: pascal 1. 2. 3. Ведь черным по белому написано Debusen, обратите внимание на Синтаксис и Замечания TerminateProcess vs ExitProcess Да, лучше конечно закрывать именно по хэндлу. Но как узнать хэндл? Особенно учитывая что у меня запускается командная строка, из которой запускается еще одно приложение, которое тоже желательно закрыть. Открываем вот так. Код: pascal 1. 2. 3. 4. И чтобы два раза не вставать - я запускаю командную строку. В ней отрабатывает какое то приложение, после чего нужно его закрыть. Как узнать, что приложение отработало и cmd.exe уже можно закрыть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 20:22:24 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
По первому вопросу выяснил, что вроде как раз ShellExecute и возвращает хэндл. Почему тогда не работает вот этот кусок кода? Код: pascal 1. 2. 3. 4. 5. В процессе выполнения GetWindowThreadProcessId(HD,PID) - PID оказывается равен нулю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 21:39:51 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
DebusenПо первому вопросу выяснил, что вроде как раз ShellExecute и возвращает хэндл.И давно это стало происходить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 22:10:21 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_DebusenПо первому вопросу выяснил, что вроде как раз ShellExecute и возвращает хэндл.И давно это стало происходить? Ну на одном из форумов прочитал. Видимо ошиблись... Так как же всё таки определить handle, чтобы корректно закрывать это несчастное окно? А то программа должна запускаться из батника, который сам в командной строке выполняется, и скорее всего в процессе выполнения может закрыть и сам батник... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 22:14:12 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Ага, уже горячо... Добрые люди подсказали, что надо использовать ShellxEcuteEx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 22:27:37 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Всё, проблема решена через ShellExecuteEx. Одновременно решена проблема с ожиданием - пока не выполнено дочернее приложение дескриптор похоже не передается. Всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 22:51:16 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
У меня тут разговор с самим собой получается, однако. Вторая проблема не решена. Нужно каким то образом узнавать что в cmd.exe отработало запущенное приложение и только после этого его закрывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 23:18:06 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Debusen> Нужно каким то образом узнавать что в cmd.exe отработало Debusen> запущенное приложение и только после этого его закрывать. А какая разница, в чём логика? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 23:36:53 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Гаджимурадов РустамDebusen> Нужно каким то образом узнавать что в cmd.exe отработало Debusen> запущенное приложение и только после этого его закрывать. А какая разница, в чём логика? В каком смысле, в чем логика? Для того, чтобы начать работать со следующим файлом мне нужно завершить обработку текущего. Файлов будет обрабатываться очень много, и просто недопустимо, чтобы программа начала работать со следующим файлом, не завершив работу с текущим. Cmd.exe я исключил, и теперь запускаю сразу нужное приложение с нужными параметрами. Поэтому формулировка вопроса сейчас звучит так: как, зная дескриптор процесса, узнать что он завершил работу? Возможно мне поможет яндекс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2012, 23:59:25 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Вроде всё. WaitforSingleObject(SEInfo.hProcess, INFINITE) Надеюсь больше у меня вопросов не возникнет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2012, 00:04:18 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Debusen> как, зная дескриптор процесса, узнать что он завершил работу? Никак. Не нужно узнавать. Нужно просто дождаться. Дождаться - WaitForSingleObject. Debusen> Возможно мне поможет яндекс... Так за чем дело стало? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2012, 00:05:48 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
О, молодец, шустрый. Debusen> WaitforSingleObject(SEInfo.hProcess, INFINITE) Только не INFINITE, а циклический опрос по периоду. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.09.2012, 00:06:28 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
А как закрыть приложение запущенное от имени другого пользователя. На компьютере запущено приложение, которое иногда нужно закрыть, я всегда пользовался функцией приведённой в топике killtask и всё работало хоршо и красиво. Но сейчас мне стало необходимо запускать приложение из моего же сервиса под системной учётной записью SYSTEM как мне сейчас закрыть приложение запущенное таким образом? killtask не помогает. Или в принципе не возможно закрыть приложение запущенное от имени другого пользователя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 09:18:51 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
MaxwellionНо сейчас мне стало необходимо запускать приложение из моего же сервиса под системной учётной записью SYSTEM как мне сейчас закрыть приложение запущенное таким образом? Запускаемое приложение стороннее или самописное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 09:25:26 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
wadman, всё самописное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 09:28:15 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Maxwellionвсё самописное Тогда всё просто: сообщаешь своему приложению любым способом, чтоб оно закрылось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 09:34:40 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
wadman, Я пробовал через SendMessage(FindWindow(nil, 'программа которую закрыть нужно'), WM_COPYDATA, Handle, Integer(@CDS)); но не получается, потому как программа которую нужно закрыть запущена сервисом, у которого отключена галочка "взаимодействие с рабочим столом" я так понимаю из-за этой галочки приложение не может получить команду или возможно потому, что опять же запущенно от имени другого пользователя Читал что есть раздавать команды pipe и сокеты, ни тем ни другим не пользовался, поискал на эту тему больно мудрёно всё, нормальных рабочих примеров не нашёл, может есть более простые способы или понятные примеры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 09:50:05 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Maxwellion, а в том приложении, которое нужно закрыть, есть очередь сообщений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 09:58:28 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
ZeliusMaxwellion, а в том приложении, которое нужно закрыть, есть очередь сообщений? А что такое очередь сообщений?:) Если имеется ввиду procedure WMCopyData(var MessageData: TWMCopyData); то да, конечно имеется. Или вы про что-то другое? Если запускать оба приложения от одного ползователя, то они вполне успешно обмениваются сообщениями указанным способом, но если от разных пользователей без взаимодействия с рабочим столом, то обмен сообщениями не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 10:06:01 |
|
||
|
Как программно закрыть приложение?
|
|||
|---|---|---|---|
|
#18+
Maxwellion, А если в твоем приложении "которое нужно закрыть" повесить UDP/TCP клиента и открыть на прослушку "некий" порт, а из другого своего приложения ты будешь посылать команду на этот порт и твое первое приложение ее получит и сделает то что ты от него просишь. Это небольшая производная метода предложенного wadman'ом в 19205771 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2016, 11:44:48 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39241127&tid=2041895]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
28ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 317ms |

| 0 / 0 |
