golang 调用win32 api 实现windows注销、重启、关机
这是一个创建于 2016-07-02 19:00:01 的文章,其中的信息可能已经有所发展或是发生改变。
package main
import (
"flag"
"fmt"
)
import (
. "github.com/CodyGuo/win"
)
var (
arg string
)
func init() {
flag.StringVar(&arg, "uFlags", "", "shutdown logoff reboot")
}
func main() {
flag.Parse()
switch arg {
case "logoff":
logoff()
case "reboot":
reboot()
case "shutdown":
shutdown()
default:
fmt.Println("您输入的参数有误.")
}
}
func logoff() {
ExitWindowsEx(EWX_LOGOFF, 0)
}
func reboot() {
getPrivileges()
ExitWindowsEx(EWX_REBOOT, 0)
}
func shutdown() {
getPrivileges()
ExitWindowsEx(EWX_SHUTDOWN, 0)
}
func getPrivileges() {
var hToken HANDLE
var tkp TOKEN_PRIVILEGES
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)
LookupPrivilegeValueA(nil, StringToBytePtr(SE_SHUTDOWN_NAME), &tkp.Privileges[0].Luid)
tkp.PrivilegeCount = 1
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED
AdjustTokenPrivileges(hToken, false, &tkp, 0, nil, nil)
}
如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!
txttool.com 说一段 esp56物联 查询128 IP查询