test-gui-connection.pyโข5.69 kB
import sys
import time
sys.path.append(r"H:\Program Files\PTV Vision\PTV Visum 2025\Exe")
def test_connection_to_running_visum():
"""
Test se possiamo connetterci a Visum giร in esecuzione
"""
print("=== TEST CONNESSIONE A VISUM GIร APERTO ===")
try:
import win32com.client
print("๐ Tentativo 1: GetActiveObject (standard)")
try:
visum = win32com.client.GetActiveObject("Visum.Visum")
print("โ
SUCCESSO! Connesso a istanza attiva con GetActiveObject")
# Test accesso dati
nodes = visum.Net.Nodes.Count
links = visum.Net.Links.Count
print(f" Rete: {nodes:,} nodi, {links:,} link")
if nodes > 0:
print("โ
Progetto caricato e accessibile!")
return True, "GetActiveObject"
else:
print("โ ๏ธ Connesso ma rete vuota")
return False, "GetActiveObject - empty"
except Exception as e:
print(f"โ GetActiveObject fallito: {e}")
print("\n๐ Tentativo 2: GetActiveObject con ProgID alternativo")
try:
visum = win32com.client.GetActiveObject("Visum.Application")
print("โ
Connesso con Visum.Application")
nodes = visum.Net.Nodes.Count
print(f" Nodi: {nodes:,}")
return True, "Visum.Application"
except Exception as e:
print(f"โ Visum.Application fallito: {e}")
print("\n๐ Tentativo 3: Dispatch con istanza esistente")
try:
visum = win32com.client.Dispatch("Visum.Visum")
print("โ
Dispatch riuscito")
nodes = visum.Net.Nodes.Count
print(f" Nodi: {nodes:,}")
if nodes > 0:
return True, "Dispatch - existing"
else:
return False, "Dispatch - new instance"
except Exception as e:
print(f"โ Dispatch fallito: {e}")
print("\n๐ Tentativo 4: Enumerazione processi COM")
try:
import pythoncom
pythoncom.CoInitialize()
# Prova a enumerare oggetti COM attivi
rot = pythoncom.GetRunningObjectTable()
print("โ
Running Object Table accessibile")
# Enumera oggetti
enum = rot.EnumRunning()
count = 0
while True:
try:
monikers = enum.Next(1)
if not monikers:
break
moniker = monikers[0]
name = moniker.GetDisplayName(None, None)
print(f" Oggetto COM: {name}")
if "visum" in name.lower():
print(f" ๐ฏ Trovato oggetto Visum: {name}")
try:
obj = rot.GetObject(moniker)
print(" โ
Oggetto acquisito!")
return True, f"ROT - {name}"
except:
print(" โ Non riesco ad acquisire l'oggetto")
count += 1
if count > 20: # Limita la ricerca
break
except:
break
print(f" Enumerati {count} oggetti COM, nessun Visum trovato")
except Exception as e:
print(f"โ Enumerazione ROT fallita: {e}")
return False, "All methods failed"
except Exception as e:
print(f"โ ERRORE GENERALE: {e}")
return False, f"Error: {e}"
def test_workflow_simulation():
"""
Simula il workflow: apri -> connetti -> disconnetti -> riconnetti
"""
print("\n" + "="*60)
print("SIMULAZIONE WORKFLOW UTENTE")
print("="*60)
print("๐ ISTRUZIONI PER L'UTENTE:")
print("1. Apri Visum manualmente")
print("2. Carica il progetto Campoleone nella GUI")
print("3. Premi INVIO qui per testare la connessione")
input("\nโณ Premi INVIO quando Visum รจ aperto con progetto caricato...")
# Test connessione
success, method = test_connection_to_running_visum()
if success:
print(f"\n๐ฏ SUCCESSO! Connessione riuscita con metodo: {method}")
print("\n๐ WORKFLOW POSSIBILE:")
print("โ
1. Utente apre Visum GUI")
print("โ
2. Utente carica progetto")
print("โ
3. Claude si connette per analisi")
print("โ
4. Claude chiude connessione")
print("โ
5. Claude si riconnette per analisi successive")
else:
print(f"\nโ FALLITO: {method}")
print("\n๐ ALTERNATIVA NECESSARIA:")
print("๐ 1. Claude crea istanza COM propria")
print("๐ 2. Claude carica progetto via codice")
print("๐ 3. Claude mantiene istanza persistente")
print("๐ 4. Utente puรฒ comunque vedere Visum se visibile=True")
if __name__ == "__main__":
# Prima test senza GUI aperta
print("FASE 1: Test senza Visum aperto")
success, method = test_connection_to_running_visum()
if not success:
print("\n" + "="*50)
print("COME PREVISTO: Nessuna istanza attiva da acquisire")
print("="*50)
# Ora simula workflow con GUI
test_workflow_simulation()
else:
print(f"\nSORPRESA! Connessione riuscita anche senza GUI: {method}")