С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/30: Рейтинг темы: голосов - 30, средняя оценка - 4.90
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329

Как закрыть DOS-овское окно после завершения в нем приложения?

06.12.2006, 03:47. Показов 6224. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как программно отследить завершение DOS-овского приложения и закрыть соответсвующее DOS-овское окно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.12.2006, 03:47
Ответы с готовыми решениями:

Как закрыть DOS-овское окно после завершения в нем приложения?
Как программно отследить завершение DOS-овского приложения и закрыть соответствующее DOS-овское окно?

После завершения приложения окно исчезает. Как его задержать?
Вопрос: после ввода окно приложения мгновенно исчезает ... main :: IO () main = do putStrLn "Kak teby zovut?" name...

Как настроить автоматический переход в Windows XP из MS DOS после завершения работы некой программы?
Добрый день! Подскажите, как решить такой вопрос. Есть некая прога, которая работает в dos. После окончания ее работы необходимо сделать...

17
Ghost
07.12.2006, 00:16
А по-подробнее?
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
07.12.2006, 04:07  [ТС]
'' Ниже приведен текст процедуры, которой я пользуюсь.

Public Sub DosSes(NAMF As String) '' NAMF - полный путь к Dos-овскому приложению
Dim process As PROCESS_INFORMATION, start As STARTUPINFO, rc As Long
start.cb = Len(start)
start.dwFlags = STARTF_USESHOWWINDOW
start.wShowWindow = SW_SHOWNORMAL
rc = CreateProcessA(0&, NAMF, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, _
0&, 0&, start, process)
''
'' Насколько я понимаю, во время выполнения предыдущей функции открывается
'' DOS-овское окно, поднимается COMMAND.COM, под управлением которого и
'' выполняется DOS приложение. COMMAND.COM при этом является запущенным
'' процессом и поэтому последующая функция ожидает завершения его работы
'' даже в том случае, когда приложение NAMF завершилось. Закрывая ручками
'' DOS-овское окно, я тем самым завершаю процесс.
''
rc = WaitForSingleObject(process.hProcess, INFINITE)
rc = CloseHandle(process.hProcess)
End Sub

'' Мне нужно закрыть DOS-овское окно по завершению работы приложения NAMF.
''
'' В Windows это реализовано путем установки флажка 'Закрывать окно по
'' завершении работы программы' во вкладке 'Программа' свойств любого DOS
'' приложения, запускаемого ярлыком с рабочего стола
0
Ghost
07.12.2006, 05:07
Ну так и запускай pif с установненным флажком. Я так в паскалЕ делал.
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
07.12.2006, 06:17  [ТС]
Спасибо за совет. Этот метод мне известен. Хотелось бы получить более элегантное решение. Кроме того, во многопользовательском варианте (общая база данных) приходиться создавать pif файл на каждом рабочем месте, что не совсем удобно.
0
Ghost
07.12.2006, 08:46
Я подозреваю, что нет более 'элегантного' решения. Дело в том, что проще (IMHO!) положить на один СЕТЕВОЙ диск пиф или включить его в комплект поставки, чем пытаться разбираться со свойствами окна, а затем его сканировать. Некоторое неудобство в виде пмфа с лихвой окупается использованием WaitForSingleObject - ибо эта штука не жрет время у процессора (жрет, на самом деле, но минимально)
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
09.12.2006, 23:38  [ТС]
Благодарю за советы и за то, что уделили мне внимание! Последний совет хорош, но только в том случае, когда DOS-приложение на всех клиентских местах находиться по одному пути. У нас на предприятии исторически сложилось, что это приложение установлено по разным путям и внутренне привязано к ним. Переделывать же приложение я не имею возможности.
0
eslobod
10.12.2006, 00:45
Опытным путем установлено, что если консольное приложение на экран ничего не выводит, то окно приложения будет закрыто вне зависимости от состояния флажка 'Закрывать окно по завершении работы программы'. Избавиться от вывода на экран можно, перенаправив stdout в файл (или в nul).

Пример1:
(кнопка ПускВыполнить)
%comspec% /cd:syspkzip.exe -a c:a.zip c:autoexec.bat

Если флаг сброшен, окошко останется.

Пример2:
(кнопка ПускВыполнить)
%comspec% /cd:syspkzip.exe -a c:a.zip c:autoexec.bat > ckzip.log

Окошко закроется в любом случае.

Примечание.
Указанное справедливо только для тех программ, которые не прользуются stderr. Этот поток в файл не перенаправить.
Ghost
11.12.2006, 04:39
MuBoNi, сорри, не въехал. Нет возможности исправить пиф для каждой машины отдельно? Или нет возможности отредактировать exe-шник?
Ghost
11.12.2006, 04:40
MuBoNi, сорри, не въехал. Нет возможности исправить пиф для каждой машины отдельно? Или нет возможности отредактировать exe-шник?
Ghost
11.12.2006, 04:40
MuBoNi, сорри, не въехал. Нет возможности исправить пиф для каждой машины отдельно? Или нет возможности отредактировать exe-шник?
Ghost
11.12.2006, 04:40
MuBoNi, сорри, не въехал. Нет возможности исправить пиф для каждой машины отдельно? Или нет возможности отредактировать exe-шник?
Ghost
11.12.2006, 04:41
MuBoNi, сорри, не въехал. Нет возможности исправить пиф для каждой машины отдельно? Или нет возможности отредактировать exe-шник?
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
11.12.2006, 05:21  [ТС]
Естественно, запускаемое DOS приложение.
0
Ghost
11.12.2006, 05:29
Сорри за повтор - медленная передача данных - думал зависло. А запускается одно и то-же приложение?
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
11.12.2006, 06:29  [ТС]
Да!
Вы желаете сказать, что достаточно прописать путь на него в PATH? Если да, то это - вполне приемлимое решение. Спасибо за наводку!
0
Ghost
11.12.2006, 06:44
(В сторонку, тихо и про себя) - век живи, век учись - дураком помрешь.
Да, с path проще. Но я хотел предложить править пиф для каждого ящика
7 / 7 / 1
Регистрация: 06.12.2006
Сообщений: 329
19.12.2006, 06:38  [ТС]
Нашел!
В процедуре, которая приведена выше, функция CreateProcessA должна сама запускать COMMAND.COM
с ключом /C и командой NAMF. Тогда, по завершению DOS-приложения NAMF, завершает работу COMMAND.COM и срабатывает функция WaitForSingleObject.

Таким образом, параметр lpCommandLine (2-й по счету) функции CreateProcessA должен иметь вид
NAMF='Command.com /c ' & NamDos, где NamDos - запускаемое DOS-приложение
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.12.2006, 06:38
Помогаю со студенческими работами здесь

Как закрыть окно стороннего приложения
Доброго времени суток! Хочу узнать, как написать программу на c++, которая закрывает чужое окно (конкретнее, Internet Explorer). ...

Как закрыть графическое окно, не завершая приложения?
Здравствуйте, форумчане, помогите пожалуйста. Описываю ситуацию: К программе подключено 2 модуля - crt и GraphABC. Через окно GraphABC...

закрыть окно DOS с помощью VB или rundll32
Можно ли закрыть окно Завершенного сеанса DOS,например с помощью VB или rundll32

Отслеживание завершения работы DOS-приложения: WaitForSingleObject или GetExitCodeProcess?!
Запускаю через ShellExecute или через CreateProcess ДОСовское приложение. Именно так, а не через VB Shell, потому что мне нужно запускать...

Как после клика закрыть окно
Ребята, помогите, пожалуйста. Есть страница 1, в ней ссылка на страницу 2. Как при клике, при переходе на вторую страницу сделать так,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru