C言語関係掲示板

過去ログ

No.934 windowsのシステム情報を表示したい

[戻る] [ホームページ]
No.11867

windowsのシステム情報を表示したい
投稿者---コマコマ(2004/01/16 17:26:18)


こんにちは。
C言語でwindowsのバージョンやCPU等をメッセージボックスで表示したいのですが、どうしたらいいのでしょうか?
ほしい情報は、windowsでコントロールパネル→システムを開くと全般のところに出てくる情報です。
ちなみに、getenvを使ってもCPUとかそういったものは取れませんでした。環境変数を知らないだけなのでしょうか?

No.11870

Re:windowsのシステム情報を表示したい
投稿者---YuO(2004/01/16 18:20:18)


>ほしい情報は、windowsでコントロールパネル→システムを開くと全般のところに出てくる情報です。

OS情報はGetVersionEx APIで取得できます。
ハードウェア関連の情報はGetSystemInfo APIで取得できます。

詳しくは,System Information (Windows System Information: Platform SDK)等を参照して下さい。


No.11921

windows2000なのにwindowsNTの値が帰ってきてしまいます
投稿者---コマコマ(2004/01/19 10:06:09)


ありがとうございます。
GetVersionExを使ってみたのですが、私のPCはwindows2000なのになぜかwindowsNTと表示されてしまいます。
MSDNのサンプル通りに書いているので下記の通りなのですが、どうしてなのでしょうか?
ちなみにLANにつながっているので他のPCを見ているのでしょうか?

{
      OSVERSIONINFO osvi;
      char szVersion[80];

      memset(&osvi, 0, sizeof(OSVERSIONINFO));
      osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
      GetVersionEx (&osvi);

      if (osvi.dwPlatformId == VER_PLATFORM_WIN32s)
          wsprintf (szVersion, "Microsoft Win32s %d.%d (Build %d)",
                    osvi.dwMajorVersion,
                    osvi.dwMinorVersion,
                    osvi.dwBuildNumber & 0xFFFF);

      else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
          wsprintf (szVersion, "Microsoft Windows 95 %d.%d (Build %d)",
                    osvi.dwMajorVersion,
                    osvi.dwMinorVersion,
                    osvi.dwBuildNumber & 0xFFFF);

      else if (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)
          wsprintf (szVersion, "Microsoft Windows NT %d.%d (Build %d)",
                    osvi.dwMajorVersion,
                    osvi.dwMinorVersion,
                    osvi.dwBuildNumber & 0xFFFF);

      MessageBox( NULL, szVersion, "Version Check", MB_OK );

  }


No.11923

Re:windows2000なのにwindowsNTの値が帰ってきてしまいます
投稿者---namani(2004/01/19 10:57:03)


ココに書いてありますが
http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfo_str.asp
NTのメジャーバージョンが5だとWindows2000になりますね
うちの場合だとXPですのでNTでメジャーバージョンが5、マイナーバージョンが1になりました
その辺もあわせて判別するように直してみてはいかがでしょう

No.11930

windows2000が帰ってくるようになりました!
投稿者---コマコマ(2004/01/19 13:48:55)


できました!できました!
ありがとうございました。ただ、wProductTypeのメンバが使えないみたいで
コンパイルに失敗しちゃいましたけど、英語で理解が1%ぐらいしかしてないけど何かが入ってないと使えないって言うことなんですよね?

No.11933

Re:windows2000が帰ってくるようになりました!
投稿者---namani(2004/01/19 15:20:29)


>wProductTypeのメンバが使えないみたいで

利用しているコンパイラによっては、
セットのヘッダファイルに構造体メンバとして定義されていないようです
ためしにうちの環境で調べましたら(VC++6.0SP5)wProductTypeは定義されてませんでした
VC++.netならありましたね
(VC以外の環境はちょっとワカリマセン><)

No.11940

Re:windows2000が帰ってくるようになりました!
投稿者---YuO(2004/01/19 18:00:32)


>ありがとうございました。ただ、wProductTypeのメンバが使えないみたいで
>コンパイルに失敗しちゃいましたけど、英語で理解が1%ぐらいしかしてないけど何かが入ってないと使えないって言うことなんですよね?

OSVERSIONINFOEX構造体を使っていますか?
OSVERSIONINFO構造体にwProductTypeメンバは存在しません。

まぁ,VC++の場合だと,.Netより前のバージョンではWindows NT4 Service Pack 6とかWindows 2000よりも前に発売されているので,
Platform SDKを入れておく必要がありますけどね。


No.11967

Re:windows2000が帰ってくるようになりました!
投稿者---コマコマ(2004/01/20 11:45:33)


>OSVERSIONINFOEX構造体を使っていますか?

OSVERSIONINFOEX構造体を使うとコンパイルが通らなかったので、どうやら私の環境にはないようです。
ありがとうございました。