Sub CATMain()
' ============================================
' FikoCATIA - acilista otomatik register bloğu
' Bunu mevcut CATMain'inin başına ekle.
' ============================================

    Dim fiko, instanceId, fileName, pid

    On Error Resume Next   ' sunucuya ulaşamazsa CATIA açılışı asla bloklanmasın

    Set fiko = Nothing
    Set fiko = CreateObject("FikoCatia.Bridge")

    If fiko Is Nothing Then
        LogFiko "HATA: FikoCatia.Bridge olusturulamadi. " & _
                "FikoCatiaServer.exe /regserver calistirildi mi?"
    Else
        fileName = "(bos)"
        If Not CATIA.ActiveDocument Is Nothing Then
            fileName = CATIA.ActiveDocument.Name
        End If

        pid = GetCatiaProcessId()
        instanceId = fiko.RegisterInstance(CATIA, pid, fileName)

        If Err.Number <> 0 Then
            LogFiko "HATA RegisterInstance: " & Err.Description
            Err.Clear
        Else
            LogFiko "Kayit basarili -> " & instanceId & " (pid=" & pid & ", dosya=" & fileName & ")"
        End If
    End If

    ' --- buradan sonra senin mevcut CATMain kodun devam etsin ---

End Sub



' ============================================
' Ayni .CATScript dosyasina ayri Function/Sub olarak ekle:
' ============================================

Function GetCatiaProcessId()
    ' CNEXT.exe süreçleri arasından PID bulmaya çalışır.
    ' Birden fazla CATIA açıksa kesin eşleşme garanti değil —
    ' Phase 5'te server tarafında daha sağlam eşleştirmeye geçilecek.
    Dim wmi, procs, p
    On Error Resume Next
    GetCatiaProcessId = 0

    Set wmi = GetObject("winmgmts:")
    Set procs = wmi.ExecQuery("Select ProcessId from Win32_Process where Name='CNEXT.exe'")

    For Each p In procs
        GetCatiaProcessId = p.ProcessId  ' birden fazlaysa sonuncusu kalır
    Next
End Function

Sub LogFiko(msg)
    ' Basit dosya log'u - CATIA'yi hicbir zaman bloklamaz.
    Dim fso, ts, logPath, shell
    On Error Resume Next
    Set shell = CreateObject("WScript.Shell")
    logPath = shell.ExpandEnvironmentStrings("%TEMP%") & "\fikocatia_macro.log"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile(logPath, 8, True) ' 8 = ForAppending
    ts.WriteLine Now & "  " & msg
    ts.Close
End Sub