3
A
回答
7
syscall
包中没有“Shutdown OS”功能,因为没有为所有操作系统提供的通用接口。
注:有一个syscall.Shutdown()
函数,但是这是shutdown a socket,而不是关闭操作系统。
最简单的方法就是使用os/exec
包(例如,
if err := exec.Command("cmd", "/C", "shutdown", "/s").Run(); err != nil {
fmt.Println("Failed to initiate shutdown:", err)
}
上述命令启动关闭序列,通常需要1分钟至真正关闭系统(和有空间与shutdown /a
中止它)。您可以为shutdown
命令提供不同的参数,不等待1分钟,但立即执行:shutdown /t 0 /s
(执行shutdown /?
以获取所有选项的列表)。
还有一个Windows API调用来关闭系统:ExitWindowsEx()
。它有2个参数,第一个是定义关机类型的标志(0x08
表示Shuts down the system and turns off the power.
),第二个是提供关机的原因。从去调用该方法,可以是这样做的:
user32 := syscall.MustLoadDLL("user32")
defer user32.Release()
exitwin := user32.MustFindProc("ExitWindowsEx")
r1, _, err := exitwin.Call(0x08, 0)
if r1 != 1 {
fmt.Println("Failed to initiate shutdown:", err)
}
但是要知道,你需要SE_SHUTDOWN_NAME
权限调用ExitWindowsEx()
,否则你得到这样的错误信息:
Failed to initiate shutdown: A required privilege is not held by the client.
相关问题
- 1. 当窗口关闭时运行代码
- 2. 使用子窗口关闭父窗口。
- 3. 在VIM中关闭Python代码窗口后自动关闭pylint窗口
- 4. 无关闭窗口的关闭窗口
- 5. 使用wmctrl关闭窗口
- 6. 使用pyatspi关闭窗口
- 7. 使用window.close关闭窗口
- 8. 关闭窗口
- 9. 用Greasemonkey关闭窗口
- 10. JS关闭窗口
- 11. OAuth2窗口关闭
- 12. 关闭jsp窗口
- 13. 关闭GTK窗口
- 14. javafx关闭窗口
- 15. 关闭WPF窗口
- 16. 块窗口关闭
- 17. VBA - 关闭窗口
- 18. 使用onclick事件关闭JavaScript窗口
- 19. 使用cmd关闭当前窗口?
- 20. 如何使用WM_CLOSE关闭子窗口?
- 21. 使用MATLAB关闭Powerpoint窗口
- 22. 使用applescript关闭多个Safari窗口
- 23. 使用javascript关闭弹出窗口
- 24. 使用shdocvw关闭弹出窗口?
- 25. 如何使用jQuery关闭窗口
- 26. 关闭在第一个窗口的代码中生成的第二个窗口
- 27. 在javascript中关闭父窗口时如何关闭子窗口?
- 28. 当父窗口在Jquery中关闭时关闭子窗口
- 29. 一个窗口关闭时关闭几个窗口
- 30. 如何防止父窗口关闭之前关闭子窗口
https://golang.org/pkg/syscall/#Shutdown? –
@u_mulder我不这么认为。 ['syscall.Shutdown()'](https://golang.org/pkg/syscall/#Shutdown)是[关闭套接字](https://msdn.microsoft.com/en-us/library/windows /desktop/ms740481(v=vs.85).aspx),而不是操作系统。 – icza