Microsoft Knowledge Base, Article ID: Q129796, hur bär jag mig åt för att köra Notepad minimerat ? Sitter just och funderar över det. Så fann jag en lösning till slut.Shelled Process
Eller vet nån något annat sätt att starta ett annat program minimerat och sedan vänta på att det andra programmet avslutats innan koden går vidare.Sv: Shelled Process
Funktionen Shell startar det andra programmet minimerat om inte annat anges, så det är enkelt. Men det blir alltid asynkront, så man vet inte när det avslutas. Vad jag tänker mig är att starta en timer som kollar varje sekund eller så om det finns någon instans av det andra programmet igång. Det går bra om man bara kör en enda sådan här uppsättning program, eller en annan, ovidkommande, instans av det andra progammet kan tänkas vara igång samtidigt. Men det är en klumpig lösning.
- HansSv: Shelled Process
Infoga följande i en bas module.
Option Explicit
Public Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Const STATUS_PENDING = &H103&
Infoga sen en Commandbutton och följande kod.
Option Explicit
Sub Command1_Click()
'Ändra sökväg beroende på Windowsversion
RunShell "c:\winnt\notepad.exe"
'RunShell "c:\windows\notepad.exe"
End Sub
Private Sub RunShell(cmdline As String)
Dim hProcess As Long
Dim ProcessId As Long
Dim exitCode As Long
ProcessId = Shell(cmdline, 6) 'Siffran anger hur programmet skall köras 6=Minimized
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
Do
Call GetExitCodeProcess(hProcess, exitCode)
DoEvents
Loop While exitCode = STATUS_PENDING
Call CloseHandle(hProcess)
MsgBox "The shelled process " & cmdline & " has ended."
End Sub