[Win32 API] OSのバージョン取得

OSVERSIONINFO構造体とGetVersionEx関数を利用すればいいらしい。
ただし、OSVERSIONINFO構造体ではエディション情報(XP Home/Proとか)までは取得できない。エディション情報を取得する場合はOSVERSIONINFOEX構造体を用いる必要があるらしい。

OSVERSIONINFO構造体

DWORD dwOSVersionInfoSize
構造体のサイズ
DWORD dwMajorVersion
OSのメジャーバージョン番号
DWORD dwMinorVersion
OSのマイナーバージョン番号
DWORD dwBuildNumber
OSのビルド番号
DOWRD dwPlatformId
プラットフォームID
TCHAR szCSDVersion[128]
追加情報

各OS毎の組み合わせ*1

OSdwPlatformIddwMajorVersiondwMinorVersiondwBuildNumberszCSDVersion
Windows 951(9x系)40950 
Windows 95 SP1a
Windows 95 OSR2/2.11111B
Windows 95 OSR2.51212C
Windows 98101998 
Windows 98 SE2222A
Windows Me903000 
Windows NT 4.02(NT系)01381 
Windows 2000502195 
Windows XP12600 
Windows XP SP2Service Pack 2
Windows XP x642  
Windows Server 20032  
Windows Server 2003 R2  
Windows Vista60  

*1 : 判明次第順次更新します

使ってみる

OSVERSIONINFO osVer;
//構造体のサイズを求めてdwOSVersionInfoSizeに格納
osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
::GetVersionEx( &osVer );

参考

2007/10/25(木)ある意味判りやすい?オブジェクト指向

オブジェクト指向とは仮想的なキャラクターと中の人を別々に取り扱うことで抽象度を上げ、保守性を向上させる手法である。(中略)

多くのオブジェクト指向言語は、中の人をクラスとして定義する。まず「男キャラ」「女キャラ」のようにして中の人を宣言し、「女キャラ」を実体化して「香織」「素子」などを作る(実体化したものをインスタンスと呼ぶ)。実体には、パラメータなどを格納することができる(これをメンバ変数と呼ぶ)。後述するコード例で、「香織」「素子」は、パラメータは異なっているが、中の人は同じである。

実体へのアクセスは、かならず中の人を通しておこなう。これには「会う」「話す」などのメソッド(メンバ関数とも呼ぶ)と呼ばれる関数を定義しておこなう。
(以下略)

だそうです。うーむ、よくあるオブジェクト指向の概念の説明、たとえば↓のようなもの

  • オブジェクトは現実世界の「モノ」です
  • 「哺乳類クラス」から派生して「人間」クラスが出来ている
  • 人間クラスは「話す」「歩く」などのメソッドを持つ

の説明で投げた、どちらかというとあっち寄りな人にはいいかもしれませぬ。

興味を持った方は[ucp:オブジェクト指向:こちら]。まあ、出典元があれなので内容については保証出来ませんがw

コンソールアプリで実行ファイルのパスの取得

C#でアプリケーションの存在するディレクトリのパスを取得するには以下のプロパティを利用する。

System.Windows.Forms.Application.StartupPath;

コンソールアプリではデフォルトではSystem.Windows.Formsが利用できない。
これを回避するには参照設定で"System.Windows.Forms"を参照設定に加えればいいらしいのだが、パスの参照をするだけでこれを加えるのはなんだか微妙。

と、いうことで"System.Windows.Forms"を利用せずに実行ファイルのディレクトリのパスを取得する方法。

FileInfo exePath = new FileInfo(Environment.CommandLine.Replace( "\"", "" ));
// "C:\foo\bar\baz.quux -i "C:\hoge\fuga\quux"の場合
// exePathには「C:\foo\bar\baz.quux -i C:\hoge\fuga\piyo」が入る

Console.WriteLine( exePath.Directory );
// この場合の出力は「C:\foo\bar」となる

参考

startuppathについて

2007/10/08(月)C#参考書候補

VCの次はC#ですか*1。とりあえず言語仕様とか概念とかほとんど知らないので、参考書を買うことにする。

具体的なプログラム作成を例にするタイプ*2よりは、言語仕様やその言語における概念に重点を置いて書かれている本*3の方が好きなので、そういったタイプの本を調査してみた。

こういった参考書は手に取ってみないと自分に合うかどうか判らないので、近いうちに大きな書店に行かないとな。と、ここまで書いて業務時間中に調べれば良かったとちょっと後悔。

*1 : その次はVBらしい(予定)。いったい何所に向かっているのだろうか>自分 そこにRomanはあるのだろうか

*2 : この手の本ってひたすらソースが誌面の大半を占めていて、全体としては中身がない本が多いんですよね。

*3 : 言語における考え方とか、基本的な関数の使い方を押さえておけば後はヘルプを見ながらなんとかすることが出来る。と、思う。全くのプログラミング未経験者でもないし。

C#エッセンシャルズ 第2版

#asin: is not allow
\2,730
とりあえずC#の基本を学ぶ上でのとっかかりにしやすそうな本。ただ、発行年が2002年なのでC#1.0(1.1?)ベースなのだろうなぁ。

Visual C#.NET逆引き大全 500の極意

#asin: is not allow
\2,730
VC.NET版は購入したけど、概念的な部分の説明くらいしか役に立たなかったなぁ。基本を押さえる上ではまあまあ良かったけど。

Visual C# 2005逆引きクイックリファレンス Windows XP/Vista対応

#asin: is not allow
\2,940
C# 2005に対応した本。

速効解決!逆引きハンドブックVisual C#

#asin: is not allow
\2,940
C#2.0 (.NET FW2.0)対応。