2010-06-09 11 views
5

Ich entwickle eine In-House-.NET-Anwendung, die auf einer VM (mit VMware) ausgeführt wird, und möchte wissen, ob es eine Möglichkeit gibt, Benachrichtigungen von VM-Systemereignissen (wie Suspendieren) , wieder aufgenommen, usw.)VMware Event-Hooks in .NET

Wer weiß von einem bequemen Weg, das zu tun? Auf der virtuellen Maschine sind VMware Tools installiert. Bietet diese eine .NET API für das Einhängen von Ereignissen?

EDIT: Insbesondere interessiert mich, wenn das System gerade wieder aufgenommen hat. Ich ging davon aus, dass dies keinem "normalen" Windows-Systemereignis entspricht (schließlich besteht der Hauptpunkt des Aussetzens und Wiederaufnehmens einer VM darin, dass Windows keine Ahnung hat, was passiert ist). Täusche ich mich? Wird das ein Ereignis auslösen?

EDIT 2: Ich schrieb dieses schnelle Konsole App, alle Systemereignisse Haken ich denken konnte, und nichts, wenn ich/resume aussetzen:

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

Haben Sie die Standard-Windows-Ereignisse ausprobiert? –

+0

Ich habe es aufgegeben, nach einem Haken zu suchen und löste das mit einem Timer, aber wenn jemand eine bessere Lösung hat, würde ich mich freuen, es zu hören! –

Antwort

1

OK, also habe ich auf der Suche nach einer einfachen .NET aufgegeben Haken dafür, aber wenn jemand anderes stolpert darauf und möchte wissen, wie ich es gelöst:

Ich habe einen Timer in meiner App, die regelmäßig (alle 10 Sekunden), und vergleicht die aktuelle Zeit mit der letzten Zeit. Wenn die Zeit deutlich länger als 10 Sekunden ist, gehe ich davon aus, dass der Computer entweder eingeschlafen oder gesperrt ist, und aktualisiere meine App nach Bedarf.

Ein wenig hacky, aber der Timer fügt nichts zur CPU- oder Speichernutzung des Programms hinzu, also finde ich, dass es nicht schrecklich ist.

2

gibt es irgendwelche vmware-spezifischen Ereignisse, die Sie Hört du? Sonst klingt es wie Sie besser dran, für die Ereignisse aus dem Windows hören würde


Werfen Sie einen Blick auf WM_POWERBROADCAST-http://www.pinvoke.net/default.aspx/user32.RegisterPowerSettingNotification

+0

Ich weiß nicht, welche Systemereignisse einem "resume" entsprechen würden ... siehe Bearbeiten. –

+0

Wenn Sie erkennen können, dass es in den Standby-Modus wechselt, können Sie eine Art Flag setzen, dass sich die Anwendung im Standby-Modus befindet. Wenn die Anwendung gestartet wird und sich im Standby-Modus befindet, kann sie zu dem Ergebnis – STW

+0

zurückkehren ging in den Standby-Modus, aber das Anhalten einer VM ist nicht dasselbe wie der Standby-Modus. –