Um den Handle zum Catia-Hauptfenster zu finden, gibt es (mindestens) zwei Vorgehensweisen.
Problematik:
Wurde noch kein CATPart geladen, so liefert CATIA.Caption korrekt 'CATIA V5' zurück; falls bereits ein Modell eingelesen wurde aber auch. In der Catia - Titelleiste steht dann bei maximiertem Modell-Fenster nämlich 'CATIA V5 - [der name des eingelesenen modells]'.
Dann liefert die Api - Funktion FindWindow als Ergebnis '0'; sprich: nix gefunden.
Die Lösungswege:
1.) EnumWindowProc - Verfahren: Hierbei werden alle Top-Level-Fenster durchlaufen und deren Titel mit 'CATIA' verglichen:
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As L
Dim hWndCatia As Long
Sub CATMain()
EnumWindows AddressOf EnumWindowProc, 0&
End Sub
Function EnumWindowProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim lSize As Long
Dim strBuff As String
lSize = 256
strBuff = Space$(lSize)
GetWindowText hwnd, strBuff, lSize 'get window caption
If Left$(strBuff, 5) = "CATIA" Then
hWndCatia = hwnd 'set handle
EnumWindowProc = 0 'stop enum
MsgBox "Catia-Handle: " & hWndCatia & vbCr & Trim(strBuff)
Exit Function 'quit
End If
EnumWindowProc = 1 'keep going
End Function
2.) Catia-Titel aus Catia-Caption und den Caption des aktuellen maximierten Fensters zusammensetzen: Wie schon erwähnt, liefert Catia.Caption stets 'CATIA V5'. Wurde bereits ein Catia Document eingelesen und maximiert,so lautet der Fenster-Titel: 'CATIA V5 - [der name des eingelesenen modells]', ansonsten weiterhin 'CATIA V5'.
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim hWndCatia as long
Sub CATMain()
GetCatiahWnd
End Sub
Function GetCatiahWnd() As Long
Dim strTitle As String
If CATIA.ActiveWindow.WindowState = catWindowStateMaximized Then
strTitle = CATIA.Caption & " - [" & CATIA.ActiveWindow.Caption & "]"
Else
strTitle = CATIA.Caption
End If
GetCatiahWnd = FindWindow(vbNullString, strTitle)
End Function