TclからNICのMACアドレスのリストを取得する場合、ipconfig/allの出力から取り出してたけど、Windowsのバージョンやロケールによって出力が変わるものを使うのはどうも気に食わんかったので、ちゃんとそれ用のWindows APIを使いたいと思っていた。
今回twapiを使えばできることが分かったので、メモしておく。
package require twapi proc getPhysicalAddresses {} { set macs {} foreach i [twapi::get_netif_indices] { set type [twapi::get_netif_info $i -type] array set netif [twapi::get_netif_info $i -type -physicaladdress] if {$netif(-type) eq "ethernet"} { lappend macs [string toupper $netif(-physicaladdress)] } } return $macs } puts [getPhysicalAddresses] |
ちなみにコマンドプロンプト上ではchcpで932以外のコードページを指定してからipconfigすれば英語の出力になる。
これをTclからもできればよかったんだけど、複数のコマンドをパイプ経由で渡すことはできないようだ。
cmd /c "chcp 437 & ipconfig/all" |
というのをexecしたりしても、標準出力を受け取ることができなかった。
一時的にバッチファイルを作り、これを実行してもよいが、美しくない。
そういうわけで、上記のテクニックが今のところ一番いいと思う。