覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

Go言語 - WindowsのアクティブなセッションのIDを取得する

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.



関連エントリ