加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用golang代码关闭窗口

发布时间:2020-12-16 09:22:36 所属栏目:大数据 来源:网络整理
导读:我正在制作一个程序,为我自动完成一些繁琐的任务,程序完成后我想关闭 windows.我知道这可以在例如C#中完成 如何使用golang关闭窗口? 解决方法 syscall 软件包中没有“关闭操作系统”功能,因为所有操作系统都没有提供通用接口. 注意:有一个 syscall.Shutdow
我正在制作一个程序,为我自动完成一些繁琐的任务,程序完成后我想关闭 windows.我知道这可以在例如C#中完成

如何使用golang关闭窗口?

解决方法

syscall软件包中没有“关闭操作系统”功能,因为所有操作系统都没有提供通用接口.

注意:有一个syscall.Shutdown()功能,但这是shutdown a socket,而不是关闭操作系统.

最简单的方法是使用os/exec包执行shutdown命令,例如

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表示关闭系统并关闭电源.),第二个是提供原因关机.要从Go调用它,你可以这样做:

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.

请参见此示例how to acquire the required privilege.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读