В процессе работы
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 файлами
срабатывает, некоторые не пошли из-за отсутствия
данных о каталоге
программы. |
|