俺の開発研究所

Ruby on Rails、Linux、Windowsを中心にIT技術系の備忘録とか。よく忘れるので。

*

VB.NETでWindowsのOSバージョン情報を取得する(Windows 2000~8)

      2014/08/31

VB.NETで、Windows 2000以降、Windows 8、Windows Server 2012までのWindowsのOSバージョン情報を取得してみる。

なお、Visual Studioのバージョンは以下です。

  • Visual Studio Professional 2012

スポンサード リンク

プラットフォームのバージョン取得

まずは、VBの「Environment」クラスの「OSVersion」プロパティで取得してみる。

そうすると、「Microsoft Windows NT 6.1.7601 Service Pack 1」(Windows 7 Professional Service Pack 1の場合)といったように、取得できるのはプラットフォームのバージョンみたい。

そもそもこのプラットフォームとは、Windows OSのもう一層下のアーキテクチャを指しているようで、Windowsのプラットフォームは「MS-DOS系」「Windows 9x系」「Windows NT系」と変遷している。

現在は、「Windows NT系」であり、Windows NT以降、Windows 8、Windows Server 2012まで、「Windows NT系」をベースに製作されているようだ。

まあ、1つ1つOSのバージョンが変わるごとにゼロから開発するのは大変ですからねぇ。

では、「Windows 8」などのバージョンを取得したい場合はどうすればいいのか。

上記のプラットフォームのバージョンだけでは、判定できない無理みたいなので頑張って取得し、判定してやる必要があるようでう。

OSバージョン取得

OSの「GetVersionEx」関数を使用すれば、OSのバージョンに関する情報を取得することができる。

また、結果を保持する「OSVERSIONINFOEX」構造体を定義してやる。

定義は以下のよう。

同様に、「GetSystemInfo」関数を使用し、プロセッサなどのコンピュータシステムに関する情報を取得する。

また、結果を保持する「SYSTEM_INFO」構造体を定義してやる。

定義は以下のよう。

同様に、「GetSystemMetrics」関数を使用し、システムの現在の構成に関する情報を取得する。

定義は以下のよう。

で、これらを使用し、以下のように関数を書いてみた。

残念ながら、すべてのOSの結果を確認することは出来ないが、とりあえず俺のPC「Windows 7」は無事に判定できています。

もっと詳細の「Standard」「Professional」などのエディション情報や「Service Pack」の情報も判定できるらしいが、めんどくさいんで諦めました。

GitHub(ソースはコチラで公開中)

OSバージョン取得モジュール

参考サイト

Environment.OSVersion プロパティ (System)

Windowsのバージョンの取得

@IT:.NET TIPS Windows OSの種類やバージョンを判別するには? – C# VB.NET

OSVERSIONINFOEX structure (Windows)

システム情報

VB Windows API 呼び出しでの状態情報を取得できますどのようにする方法

GetSystemMetrics VB Windows API 関数を呼び出すには、方法

 - Visual Basic(VB.NET)