تستطيع ان تشغل البرامج بأستخدام الامر shell . ولكن....
كيف تعرف ان البرنامج الذي شغلته باستخدام هذا الامر قد انتهى من تنفيذ مهمته او ان المستخدم قد انهاه لتقوم انت بأستئناف عملك بناء على ما حدث؟؟
يمكنك ذلك باستخدام القيمه التي يرجعها الامر shell في دوال API بسيطه .
المثال التالي يحتاج الى فورم و زر عند الضغط عليه سيفتح الNotepad و عند انهاءها سيعرض البرنامج رساله تخبرك بذلك.
Option Explicit Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Const SYNCHRONIZE = &H100000 Private Const INFINITE = -1&
و في الزر:
Dim process_id As Long
Dim process_handle As Long
Dim s
' Start the program, 'shell' will give us 'task ID '
On Error GoTo ShellError
process_id = Shell("notepad", vbNormalFocus)
On Error GoTo 0
DoEvents
' Wait for the program to finish.
' Get the process handle by converting 'task ID' to process handle
process_handle = OpenProcess(SYNCHRONIZE, 0, process_id)
If process_handle <> 0 Then
WaitForSingleObject process_handle, INFINITE
CloseHandle process_handle
End If
'when finished show msgbox
MsgBox "Program ended!"
Exit Sub
ShellError:
MsgBox "Error starting task " & vbCrLf & Err.Description