私は、プログラムが終了した後、私はウィンドウをシャットダウンしたいと思っています。私はこれが例えばC言語で行うことができることを知っています。golangコードを使用してウィンドウをシャットダウンする
golangを使ってウィンドウをシャットダウンする方法はありますか?
私は、プログラムが終了した後、私はウィンドウをシャットダウンしたいと思っています。私はこれが例えばC言語で行うことができることを知っています。golangコードを使用してウィンドウをシャットダウンする
golangを使ってウィンドウをシャットダウンする方法はありますか?
syscall
パッケージには「シャットダウンOS」機能はありません。これは、すべてのオペレーティングシステムで共通のインターフェイスが提供されていないためです。
注: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
はShuts down the system and turns off the power.
を意味します)、2番目はシャットダウンの理由を示すことです。この例how to acquire the required privilegeを参照してください
Failed to initiate shutdown: A required privilege is not held by the client.
:
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)
}
しかし、あなたはExitWindowsEx()
を呼び出すためのSE_SHUTDOWN_NAME
特権が必要であることを知って、他のあなたのようなエラーメッセージが表示されます:ゴーからこれを呼び出すには、次のようにそれを行うことができます。
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