Windowsではセッションという概念が存在しています。(セッション 0 の分離 - Windows 7 対応アプリケーションの互換性)
複数セッションの中で現在アクティブになっている(物理コンソールにアタッチしている)セッションのセッションIDをGo言語で取得するサンプルです。
■サンプルコード
package main import ( "fmt" "log" "syscall" ) var ( kernel32, _ = syscall.LoadLibrary("kernel32.dll") wtsGetActiveConsoleSessionID, _ = syscall.GetProcAddress(kernel32, "WTSGetActiveConsoleSessionId") ) func abort(funcname string, err error) { panic(fmt.Sprintf("%s failed: %v", funcname, err)) } // ActiveSessionID : アクティブなセッションのIDを返す。アクティブなセッションが無い場合は-1を返す func ActiveSessionID() int32 { r0, _, callErr := syscall.Syscall(uintptr(wtsGetActiveConsoleSessionID), 2, 0, 0, 0) if callErr != 0 { abort("Call WTSGetActiveConsoleSessionId", callErr) } return int32(r0) } func main() { log.Println("App start.") log.Printf("Active Session ID %d", ActiveSessionID()) log.Println("App End.") }
単純に、WindowsAPIのWTSGetActiveConsoleSessionId
を呼び出しているだけです。(WTSGetActiveConsoleSessionId function | Microsoft Docs)
■実行結果
2017/05/18 05:28:32 App start. 2017/05/18 05:28:32 Active Session ID 1 2017/05/18 05:28:32 App End.