test-admin-com.pyβ’6.35 kB
# Test COM con Visum avviato come amministratore
import sys
import time
sys.path.append(r"H:\Program Files\PTV Vision\PTV Visum 2025\Exe")
print("=== TEST COM CON VISUM AMMINISTRATORE ===")
print(f"Timestamp: {time.strftime('%H:%M:%S')}")
try:
import win32com.client
import pythoncom
# Inizializza COM
pythoncom.CoInitialize()
print("β
COM inizializzato")
print("\nπ TEST 1: GetActiveObject")
try:
visum = win32com.client.GetActiveObject("Visum.Visum")
print("π SUCCESSO! GetActiveObject funziona con admin!")
# Test immediato accesso rete
nodes = visum.Net.Nodes.Count
links = visum.Net.Links.Count
zones = visum.Net.Zones.Count
print(f"π RETE ACCESSIBILE:")
print(f" Nodi: {nodes:,}")
print(f" Link: {links:,}")
print(f" Zone: {zones:,}")
if nodes > 0:
print("π― PERFETTO! Visum admin ha progetto caricato!")
# Test analisi veloce per confermare piena funzionalitΓ
print("\nπ TEST FUNZIONALITΓ COMPLETE:")
# Accesso attributi link
link_set = visum.Net.Links
attrs = link_set.GetMultipleAttributes(['No', 'Length', 'NumLanes'])
print(f"β
Link attributes accessibili: {len(attrs)} link")
# Sample di primi 3 link
for i, (no, length, lanes) in enumerate(attrs[:3]):
print(f" Link {int(no)}: {length:.3f} km, {int(lanes)} corsie")
# Accesso nodi
node_set = visum.Net.Nodes
node_attrs = node_set.GetMultipleAttributes(['No', 'XCoord', 'YCoord'])
print(f"β
Node attributes accessibili: {len(node_attrs)} nodi")
# Sample coordinate primi 3 nodi
for i, (no, x, y) in enumerate(node_attrs[:3]):
print(f" Nodo {int(no)}: ({x:.3f}, {y:.3f})")
# Zone
zone_set = visum.Net.Zones
zone_attrs = zone_set.GetMultipleAttributes(['No', 'XCoord', 'YCoord'])
print(f"β
Zone attributes accessibili: {len(zone_attrs)} zone")
# Statistiche rapide
lengths = [attr[1] for attr in attrs[:100]] # Prime 100
avg_length = sum(lengths) / len(lengths)
max_length = max(lengths)
min_length = min(lengths)
print(f"\nπ ANALISI STATISTICA:")
print(f" Lunghezza media link: {avg_length:.3f} km")
print(f" Link piΓΉ lungo: {max_length:.3f} km")
print(f" Link piΓΉ corto: {min_length:.3f} km")
# ConnettivitΓ
connectivity = links / nodes
print(f" ConnettivitΓ : {connectivity:.2f} link/nodo")
# SUCCESSO TOTALE!
result = {
"timestamp": time.time(),
"success": True,
"method": "GetActiveObject_Admin",
"network": {
"nodes": nodes,
"links": links,
"zones": zones
},
"statistics": {
"avg_length": avg_length,
"max_length": max_length,
"min_length": min_length,
"connectivity": connectivity
},
"sample_links": [
{"no": int(attr[0]), "length": float(attr[1]), "lanes": int(attr[2])}
for attr in attrs[:5]
]
}
import json
with open(r"H:\visum-thinker-mcp-server\visum_admin_success.json", 'w') as f:
json.dump(result, f, indent=2)
print(f"\nπ RISULTATO SALVATO! GetActiveObject funziona con admin!")
else:
print("β οΈ Visum connesso ma progetto non caricato")
except Exception as e:
print(f"β GetActiveObject ancora fallito: {e}")
# Prova altri metodi anche se GetActiveObject fallisce
print(f"\nπ TEST 2: Dispatch con admin")
try:
visum = win32com.client.Dispatch("Visum.Visum")
nodes = visum.Net.Nodes.Count
print(f"β
Dispatch funziona: {nodes:,} nodi")
if nodes > 0:
print("π― Dispatch ha accesso ai dati!")
except Exception as e2:
print(f"β Anche Dispatch fallito: {e2}")
# Test ROT con admin
print(f"\nπ TEST 3: Running Object Table con admin")
try:
rot = pythoncom.GetRunningObjectTable()
enum_moniker = rot.EnumRunning()
visum_found = False
count = 0
while True:
try:
monikers = enum_moniker.Next(1)
if not monikers:
break
moniker = monikers[0]
name = moniker.GetDisplayName(None, None)
if 'visum' in name.lower() or 'ptv' in name.lower():
print(f"π― ROT Visum object: {name}")
try:
obj = rot.GetObject(moniker)
nodes = obj.Net.Nodes.Count
print(f"β
ROT access success: {nodes:,} nodi")
visum_found = True
except:
print(f"β ROT object not accessible")
count += 1
if count > 20: # Limita ricerca
break
except:
break
if visum_found:
print("β
ROT method works with admin!")
else:
print(f"β Nessun oggetto Visum in ROT (scansionati {count})")
except Exception as e:
print(f"β ROT test failed: {e}")
pythoncom.CoUninitialize()
except ImportError:
print("β win32com.client non disponibile")
except Exception as e:
print(f"β Errore generale: {e}")
print(f"\n=== TEST COMPLETATO ===")
print("Controlla visum_admin_success.json per conferma!")