- ベストアンサー
Windows XPの種類を識別するには?
お世話になります。 Windows XPにはHome EditionやProfessionalなどいくつかの種類がありますが、このXPの種類を識別するにはどうすればよいでしょうか? レジストリにそのようなキーがありますか? あるいは環境変数が存在しますか? (使用言語に依存した方法でもOKです。言語は問いません。) 取得方法を教えてください。よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
APIのGetVersionExを使います。 wSuiteMask が VER_SUITE_PERSONAL 以外ならProのようです。 http://hpcgi1.nifty.com/MADIA/Vcbbs/wwwlng.cgi?print+200411/04110003.txt
その他の回答 (3)
- pita-gora
- ベストアンサー率70% (102/145)
コマンドラインで dxdiag /t dxdiag.txt と入力すると、テキストファイル dxdiag.txt にシステムの情報が 出力されます。(dxdiag /x dxdiag.txt ならXML形式) バッチファイルならこんな感じで環境変数にセットできます。 (Windows XP Pro で動作確認しました) echo off dxdiag /t dxdiag.txt for /F "tokens=2 delims=:" %%a in ('find "Operating" dxdiag.txt') do set OS=%%a echo %OS%
お礼
ご回答ありがとうございました。 システム情報をテキストに落とせるのですね。これは便利です!! バッチファイルを用いた情報の拾い方もご教授くださり、本当にありがとうございました。お返事が遅くなり、申し訳ありませんでした。 バッチファイルの書き方をもっと勉強して、短時間で情報を拾えるようにしたいと思います。 (dxdiagの出力ファイルはかなり巨大になるため、手元の環境では情報の表示まで1分程度かかってしまいます。このバッチファイルを改良して、テキストファイルを最後まで読まなくても結果を表示させることができるようにしようと試みたのですが、私のスキル不足のため至りませんでした。結局、外部コマンドとしてdxdiagを実行させるバイナリプログラムを作成して対処しました。)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
WMIを使う方法も。例としてVBScriptで。 ---- ここから ---- Set objWMIService = GetObject("winmgmts:") Set colOperatingSystem = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For Each objOperatingSystem in colOperatingSystem Wscript.Echo objOperatingSystem.Caption Next ---- ここまで ---- 上記内容をテキストファイル(たとえばos.vbs等)に入れて実行すると「Microsoft Windows XP Professional」とか「Microsoft Windows 2000 Professional」等と表示されます。
お礼
ご回答ありがとうございました。 WMIという便利なものがあることを今回はじめて知りました。Windows用の管理インターフェイスとのことですので、今後これをもっと勉強し、管理に役立てていきたいと思います。 VBScriptのサンプルまでつけてくださり、労せずしてOSの種類を表示させることができました。本当にありがとうございました。 お返事が遅くなり、申し訳ありませんでした。
- lonelysanta
- ベストアンサー率50% (8/16)
「マイコンピュータ」の「システム情報の表示」から見れますよ。
お礼
ご回答ありがとうございます。 私の記述の仕方が悪かったのですが、 人間が視覚的に識別する方法ではなくて、 プログラミングにも利用できる方法を探しております。 もしもご存知でしたらお教えください。よろしくお願いします。
お礼
ご回答ありがとうございました。 便利なAPIがあるのですね。サンプルの掲載されたURLも載せてくださり、わかりやすかったです。 さっそく参考にして(Borland C++ Compiler 5.5で)識別プログラムを作成してみました。 #include <stdio.h> #include <windows.h> int main(void) { OSVERSIONINFOEX test; test.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); GetVersionEx((LPOSVERSIONINFO)&test); if( (test.dwMajorVersion == 5) && (test.dwMinorVersion == 1) ){ printf("Windows XP "); } else if( (test.dwMajorVersion == 5) && (test.dwMinorVersion == 2) ){ printf("Windows Server 2003 "); } printf("%x\n",test.wSuiteMask); return 0; } これを実行すると、 Home Editionの場合 Windows XP 300 Professionalの場合 Windows XP 100 2003サーバの場合 Windows Server 2003 112 という出力を得ます。 300 = VER_SUITE_PERSONAL(0x00000200) + VER_SUITE_SINGLEUSERTS(0x00000100) 100 = VER_SUITE_SINGLEUSERTS(0x00000100) 112 = VER_SUITE_SINGLEUSERTS(0x00000100) + VER_SUITE_TERMINAL(0x00000010) + VER_SUITE_ENTERPRISE(0x00000002) ということですよね? http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/osversioninfoex_str.asp たいへん勉強になりました。これを利用して今後管理用アプリを作れそうです。ありがとうございました。