![如何从 Ubuntu 客户操作系统更改 Windows 主机的电源状态?](https://linux22.com/image/1586296/%E5%A6%82%E4%BD%95%E4%BB%8E%20Ubuntu%20%E5%AE%A2%E6%88%B7%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E6%9B%B4%E6%94%B9%20Windows%20%E4%B8%BB%E6%9C%BA%E7%9A%84%E7%94%B5%E6%BA%90%E7%8A%B6%E6%80%81%EF%BC%9F.png)
我在 Windows 7 主机上的 VMWare Workstation 12 中有一个 Ubuntu14.04 客户机。
如何从客户操作系统更改主机的电源状态,例如关闭电源或睡眠?
答案1
目前我的方式是在客户操作系统中使用共享文件夹:
echo "">/mnt/hgfs/share/sleep
然后在主机上编写程序,监视文件“sleep”是否存在,并执行睡眠动作。
为了关机,该程序监视vmware-vmx.exe,当它消失时,它会关闭计算机。
C#程序如下:
class ShutdownComputer
{
//true for sleep,false for shutdown
static bool sleep = true;
static public void ShutdownComputerDo()
{
string[] process_names = new string[]
{
"vmware-vmx",
};
while (true)
{
bool done = true;
string sleep_signal_fn = @"C:\VMachine\VM_Ubuntu14.04\share\sleep";
if (sleep)
{
done = File.Exists(sleep_signal_fn);
if (done) File.Delete(sleep_signal_fn);
}
else
{
foreach (string pn in process_names)
{
if (Process.GetProcessesByName(pn).Length > 0) done = false;
}
}
if (done)
{
var psi=sleep?
new ProcessStartInfo("rundll32.exe", " powrprof.dll,SetSuspendState 0,1,0")
: new ProcessStartInfo("shutdown", "/s /t 0");
psi.CreateNoWindow = true;
psi.UseShellExecute = false;
Process.Start(psi);
if (!sleep) break;
}
Thread.Sleep(5 * 1000);
}
}
}
虽然它有效,但是还有更简单的方法吗?