DOS-программы
Home Up Автозапись Буфер обмена Долой пробелы DOS-программы Контролы в массиве Редактор VB Скрытые папки INI-файлы Лог-файлы Миминизация Звук в MP3 Советы

В процессе работы VB-программы запускается DOS-программа с помощью Shell.
Как можно сделать, чтобы программу запустить, она отработала и полностью
закрылась? Если я делаю vbNormalFocus, или vbMinimizedFocus, или
vbMinimizedNoFocus, то программа отрабатывает, но остается свернутое окно
"Сеанс завершен", которое приходится вручную закрывать. Если я делаю vbHide,
то она отрабатывает невидимо, но все равно остается в памяти и видна в
списке задач под именем Winoldap, причем, если несколько раз так запускать,
то они, соответственно, множатся.

Это общая проблема в Win'95/98. Дело в том, что для ДОСовой задачи винда
запускает враппер - приложение, которое показывает эту досовую задачу на экране
в отдельном окне. Так вот, сама программа может завершиться, а враппер - нет.

Лучший способ решения который я нашел - это запускать задачу через PIF-файл. В
этом файле описываются параметры выполнения программы, в том числе - закрывать
ли окно по завершению работы. Помнится, я даже создавал PIF-файл для каждого
запуска, а по завершению работы удалял его. У этого файла простой формат -
легко разобраться.

На ваши вопросы отвечал Hackcode

А вот что посоветовал Николай на эту тему:

Private Sub Command1_Click()
Dim f As Variant
'f = Shell("c:\autoexec.bat /K", 4)
f = launchDosApp(Text1.Text, True, False, 4)
MsgBox f
End Sub

Public Function launchDosApp(AppString As String, _
Optional fConfirm As Boolean = False, _
Optional fExit As Boolean = True, _
Optional windowstyle = vbMaximizedFocus)
'Запускает дос приложение, коммандная строка которого содержится
' в AppString, Если fconfirm=true, загружается оболочка дос в коммандной
' строке содержится AppString и запрос на исполнение, Если fConfirm = false
' (по умолчанию), приложение запускается сразу, если
' флаг fExit =true, сеанс Дос закрывается после завершение приложения
On Error GoTo err_launchDosApp
Dim sCommandString As String
Dim sKey As String
If fConfirm Then sKey = " /Y"
sKey = sKey & " /" & IIf(fExit, "c", "k")
'Y, C, K ключи Command.com
If AppString = "" Then
'запускается только коммандный процессор
sCommandString = Environ$("comspec")
Else
sCommandString = Environ$("comspec") & sKey & " " & AppString
End If
launchDosApp = Shell(sCommandString, windowstyle)
Exit_launchDosApp: Exit Function
err_launchDosApp:
MsgBox "Ошибка при запуске приложения:" & vbCrLf & _
Err.Number & " " & Err.Description, vbCritical
Resume Exit_launchDosApp
End Function

Я нашел в книге такую примочку, попробовал, в случае с Bat файлами
срабатывает, некоторые не пошли из-за отсутствия данных о каталоге
программы.

 

 

Home ] Up ] О группе ] Статьи ] Исходники ] Орфография ] Проекты ] Наша рассылка ]

Хостинг от uCoz