Перехват событий VMware в .NET - PullRequest
5 голосов
/ 10 июня 2010

Я разрабатываю собственное приложение .NET, которое будет работать на ВМ (с VMware), и хочу узнать, есть ли способ получать уведомления о системных событиях ВМ (таких как приостановка, возобновление и т. Д.)

Кто-нибудь знает удобный способ сделать это? На виртуальной машине установлены VMware Tools, предоставляет ли .NET API для перехвата событий?

РЕДАКТИРОВАТЬ: В частности, меня интересует, когда система только что возобновила. Я предположил, что это не соответствует никаким «обычным» системным событиям Windows (в конце концов, весь смысл приостановки и возобновления виртуальной машины заключается в том, что Windows не знает, что произошло). Я ошибаюсь? Будет ли это вызвать событие?

РЕДАКТИРОВАТЬ 2: Я написал это быстрое консольное приложение для перехвата всех системных событий, о которых я мог думать, и ничего не получил, когда я приостановил / возобновил:

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();
}

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

есть ли какие-нибудь специфичные для vmware события, которые вы будете слушать?В противном случае звучит так, будто вам лучше прослушать эти события из Windows


Взгляните на WM_POWERBROADCAST - http://www.pinvoke.net/default.aspx/user32.RegisterPowerSettingNotification

1 голос
/ 07 октября 2010

ОК, поэтому я перестал искать легкий .NET хук для этого, но если кто-то еще наткнется на это и захочет узнать, как я это решил:

У меня есть таймер в моемприложение, которое срабатывает регулярно (каждые 10 секунд) и сравнивает текущее время с последним.Если время заметно превышает 10 секунд, я предполагаю, что компьютер либо спал, либо завис, и обновляю мое приложение по мере необходимости.

Немного взломано, но таймер ничего не добавляет в ЦП или память программыиспользование, так что я думаю, что это не ужасно.

...