2010-06-09 11 views
5

Estoy desarrollando una aplicación .NET interna que se ejecutará en una máquina virtual (con VMware), y quiero saber si hay una manera de obtener notificaciones de los eventos del sistema VM (como suspender , reasumido, etc.)Ganchos de eventos de VMware en .NET

¿Alguien sabe de una manera conveniente de hacer eso? La máquina virtual tiene instaladas VMware Tools, ¿eso proporciona una API .NET para conectar eventos?

EDIT: En particular, estoy interesado en cuando el sistema acaba de reanudarse. Supuse que esto no se corresponde con ningún evento de sistema de Windows "normal" (después de todo, el objetivo de suspender y reanudar una VM es que Windows no tiene idea de lo que sucedió). ¿Estoy equivocado? ¿Eso desencadenará un evento?

EDIT 2: Escribí esta aplicación de consola rápida para conectar todos los eventos del sistema que podría pensar en, y obtener nada cuando me suspensión/reanudación:

static void Main(string[] args) { 

    SystemEvents.DisplaySettingsChanged += (sender, e) => Console.WriteLine("Display settings changed"); 
    SystemEvents.EventsThreadShutdown += (sender, e) => Console.WriteLine("Events thread shutdown"); 
    SystemEvents.PowerModeChanged += (sender, e) => Console.WriteLine("Power mode changed"); 
    SystemEvents.SessionEnding += (sender, e) => Console.WriteLine("Session ending"); 
    SystemEvents.SessionSwitch += (sender, e) => Console.WriteLine("Session switch"); 
    SystemEvents.UserPreferenceChanging += (sender, e) => Console.WriteLine("User preference changing"); 

    Console.ReadLine(); 
} 
+0

¿Has probado los eventos de Windows estándar? –

+0

He renunciado a buscar un anzuelo y lo resolví con un cronómetro, pero si alguien tiene una mejor solución, ¡me alegra escucharlo! –

Respuesta

1

bien, así que he dado para arriba en busca de un fácil .NET gancho para esto, pero si alguien más tropieza con esto y quiere saber cómo lo resolví:

Tengo un temporizador en mi aplicación que se dispara regularmente (cada 10 segundos) y compara la hora actual con la última. Si el tiempo es apreciablemente superior a 10 segundos, supongo que la computadora ha estado dormida o suspendida y actualizo mi aplicación según sea necesario.

Un poco hacky, pero el temporizador no agrega nada a la CPU del programa o al uso de memoria, así que supongo que no es horrible.

2

¿existen eventos son de VMware específico que Estaría escuchando? De lo contrario, parece que sería mejor escuchar para esos eventos desde Windows


Tome un vistazo a WM_POWERBROADCAST-http://www.pinvoke.net/default.aspx/user32.RegisterPowerSettingNotification

+0

No sé qué eventos del sistema corresponderían a un "currículum" ... ver edición. –

+0

si puede detectarlo ingresando en modo de espera, entonces puede establecer algún tipo de indicador de que la aplicación está en modo de espera; si la aplicación comienza a ejecutarse y ve que está en modo de espera, puede inferir que debe haberse reiniciado – STW

+0

Eso funcionaría si entró en modo de espera, pero suspender una máquina virtual no es lo mismo que el modo de alimentación en espera. –