代码之家  ›  专栏  ›  技术社区  ›  Hank

.NET中的VMware事件挂钩

  •  5
  • Hank  · 技术社区  · 14 年前

    我正在开发一个内部.NET应用程序,它将在虚拟机上运行(使用vmware),并想知道是否有方法从虚拟机系统事件(如挂起、恢复等)获取通知。

    有人知道一个方便的方法吗?虚拟机安装了vmware工具,是否提供了用于挂接事件的.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 回复  |  直到 11 年前
        1
  •  2
  •   STW    14 年前

    有没有您要监听的特定于VMware的事件?否则,你最好还是从Windows中收听这些活动


    看一看 WM_POWERBROADCAST —— http://www.pinvoke.net/default.aspx/user32.RegisterPowerSettingNotification

        2
  •  1
  •   Hank    14 年前

    好吧,我已经放弃了寻找一个简单的.NET钩子,但是如果有人偶然发现了这个问题,并且想知道我是如何解决的:

    我的应用程序中有一个定时(每10秒触发一次)并将当前时间与上次时间进行比较。如果时间明显长于10秒,我假设计算机已处于休眠或挂起状态,并根据需要刷新我的应用程序。

    有点黑客,但定时器并没有增加程序的CPU或内存使用量,所以我觉得这并不可怕。