Code:
Private Function InventorInstanzenBeenden() As Boolean
Do
Dim invApp As Inventor.Application = Nothing Try
' Bezug auf laufende Inventerinstanz:
invApp = DirectCast(System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application"), Inventor.Application)
Catch ex As Exception
' Keine laufende Inventorinstanz gefunden:
If ex.Message.StartsWith("Vorgang nicht verfügbar.") Then Return True
'Throw ex
Return False
End Try
' Instanz sichtbar machen:
invApp.Visible = True
' Inventorinstanz in den Vordergrund setzen:
SetForegroundWindow(CType(invApp.MainFrameHWND, IntPtr))
' Speichern überspringen:
Dim SpeichernUeberspringen As Boolean = True
If invApp.Documents.Count > 0 Then '.VisibleDocuments
If MessageBox.Show("Sollen geöffnete Dokumente gespeichert werden?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
SpeichernUeberspringen = False
End If
End If
' Alle Dokumente schließen:
For Each ivDok As Inventor.Document In invApp.Documents '.VisibleDocuments
ivDok.Close(SpeichernUeberspringen)
Next
''
'If invApp.Documents.Count > 0 Then
' Debug.Print("Nicht alle Dokumente wurden geschlossen. Vorgang abgebrochen!")
' Return False
'End If
' ProzessID festlegen:
Dim pID As Integer
GetWindowThreadProcessId(CType(invApp.MainFrameHWND, IntPtr), pID)
' Bezug auf Prozess:
Dim p As Process = Process.GetProcessById(pID)
' Inventor beenden:
invApp.Quit()
' COM-Objekt freigeben:
System.Runtime.InteropServices.Marshal.ReleaseComObject(invApp)
invApp = Nothing
' warten, bis Prozess beendet wird:
Do Until p.WaitForExit(1)
'System.Threading.Thread.Sleep(3000)
Application.DoEvents()
Loop
Loop
End Function
'Quelle: http://www.pinvoke.net
<Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, _
ByRef lpdwProcessId As Integer) As Integer
End Function
<Runtime.InteropServices.DllImport("user32.dll")> _
Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.Bool)> Boolean
End Function