Behöver veta om det finns något smart sätt att få reda på hur man kan få reda på om en process/applikation har hängt sig eller den fortfarande rullar. När ett program fryser sig så kan det ju fortfarande se ut som om det körs och det är det som jag vill undvika. Du kan testa denna funktionen. Jag har dock inte provkört den själv.Hur veta om applikation/process har hängt sig
Tacksam för all hjälp.
/MikaelSv: Hur veta om applikation/process har hängt sig
Skriv först in deklarationerna:
<code>
Public Declare Function OpenProcess Lib "kernel32" Alias "OpenProcess" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" Alias "GetExitCodeProcess" (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" Alias "CloseHandle" (ByVal hObject As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" Alias "WaitForSingleObject" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
</code>
Här kommer funktionen som returnerar Exit Code av exe-filen:
<code>
Function WaitForProcess(ByVal idProc As Long, _
Optional ByVal Sleep As Boolean) As Long
Dim iExitCode As Long, hProc As Long
' Get process handle
hProc = OpenProcess(PROCESS_ALL_ACCESS, False, idProg)
If Sleep Then
' Sleep until process finishes
Dim iResult As Long
iResult = WaitForSingleObject(hProc, INFINITE)
If iResult = WAIT_FAILED Then Err.Raise Err.LastDLLError
' Save the return code
GetExitCodeProcess hProc, iExitCode
Else
' Get the return code
GetExitCodeProcess hProc, iExitCdoe
' Wait for process but relinquish time slice
Do While iExitCode = STILL_ACTIVE
DoEvents
GetExitCodeProcess hProc, iExitCode
Loop
End If
CloseHandle hProc
WaitForProcess = iExitCode ' Return exit code
End Function
</code>