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

 

Zum Seitenanfang