Jag vill att program1 ska starta först och när det har Vet inte hur du startar dina program, men jag misstänker att du använder ShellExecute. Efter lite tjatande på #vb på DALnet så fick jag följande ledtråd: I tips och trix finns ett exempel på hur man startar scandisk och kör det och väntar på att det ska köra klart. Du kanske kan göra nått med det. Lite Delphi kod, du får översätta till lämpligt språk själv, samt skriva alla DECLARE satser ;.) Tack för all hjälp men jag lyckades lösa det själv. Jag har använt följande, men det funkade inte i W2000 (jag har haft inlägg här om det tidigare)Starta program i ordning
startat klart så ska program2 starta. Sedan ska program3 startas
och när det har startat klart så ska program4 starta.
Hur gör jag?
/HjortenSv: Starta program i ordning
Om du kan köra ShellExecute, och det inte returnerar något fel, så är programmet startat. Sedan är det upp till programmet (word, excel, whatever) att skicka ett meddelande eller motsvarande när en caret har dykt upp och programmet är redo för "input". Men om några program gör detta så misstänker jag att det är olika för samtliga.
Har sett vissa program lösa detta genom att lägga in en delay på ex. 10000 ms., efter ShellExecute.
Ledsen att jag inte kan ge dig något bättre tips.
I och för sig, så kanske du kan kolla när en viss class har skapats???
Har inte testat än, men har för mig att det finns ett API som heter FindWindow motsvarande. Du kan ju köra
Do
Loop Until FindWindow("WordSplash") <<< Exempel, ser troligen inte ut så här
Men det blir i och för sig inte någon universal lösning, men det kanske du inte vill ha?
Så, nu kommer jag inte på nåt bättre.
Hoppas det löser sig.
Hör gärna av dig om du kommer på något, eller om detta fungerar ypperligt.
//GalaxeirSv: Starta program i ordning
"shell the first one, get process ID as return code, open process id to get a handle, WaitForInputIdle on that handle, then shell second."
Någon som orkar hjälpa mig??
/HjortenSv: Starta program i ordning
MvH Dan "DaPe" PerssonSv: Starta program i ordning
Eller använd delphi, och skriv enbart "Uses Windows, ShellAPI" ;.)
Det borde fungera något så här
pid := ShellExecute(0, "open", "c:\windows\calc.exe", nil, "c:\windows", SW_SHOWDEFAULT);
process = OpenProcess(PROCESS_QUERY_INFORMATION+SYNCHRONIZE,FALSE,pid);
^Detta kan du få labba med, kan inte riktigt funktionen
WaitForInputIdle(process, timeout);
Starta nästa program här
ps. Kanske skulle vara bättre att använda CreateProcess??? eller Kanske inte...
//GalaxeirSv: Starta program i ordning
Använde helt enkelt Shell och några timers...
/HjortenSv: Starta program i ordning
- Hans
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&
'
Sub RunShell(cmdline As String)
Dim hProcess As Long
Dim ProcessId As Long
Dim exitCode As Long
ProcessId = Shell(cmdline, vbNormalFocus) '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
Public Sub launch(commandline As String)
MsgBox "launch"
RunShell (commandline)
End Sub