普通网友 2016-09-20 13:19
浏览 412
已采纳

使用golang代码关闭窗口

I am making a program that automates some tedious tasks for me, after the program is done I want to shutdown windows. I know this can be done in for example C#

How can I shutdown window using golang?

  • 写回答

2条回答 默认 最新

  • douyi3307 2016-09-20 15:40
    关注

    There is no "Shutdown OS" function in the syscall package, because there is no common interface provided for that by all operating systems.

    Note: there is a syscall.Shutdown() function, but that is to shutdown a socket, and not to shutdown the operating system.

    The easiest would be to just execute the shutdown command using the os/exec package, e.g.

    if err := exec.Command("cmd", "/C", "shutdown", "/s").Run(); err != nil {
        fmt.Println("Failed to initiate shutdown:", err)
    }
    

    The above command initiates a shutdown sequence which usually takes 1 minute to really shut down the system (and there's room to abort it with shutdown /a). You may provide different arguments to the shutdown command to not wait 1 minute but proceed immediately: shutdown /t 0 /s (execute shutdown /? to get a list of all options).

    There is also a Windows API call to shutdown the system: ExitWindowsEx(). It has 2 parameters, first is the flags to define the shutdown type (0x08 means Shuts down the system and turns off the power.), second is to provide a reason for the shutdown. To call this from Go, you can do that like this:

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

    But know that you need SE_SHUTDOWN_NAME privilege to call ExitWindowsEx(), else you get an error message like:

    Failed to initiate shutdown: A required privilege is not held by the client.
    

    See this example how to acquire the required privilege.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。