Windowsバージョン取得について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
だんごさん
記事: 273
登録日時: 12年前

Windowsバージョン取得について

#1

投稿記事 by だんごさん » 11年前

_GetSystemInfo関数(extern int _GetSystemInfo(int *DxLibVer , int *DirectXVer , int *WindowsVer ) ; // DXライブラリと DirectX のバージョンと Windows のバージョンを得る
というのを使用し、Windowsのバージョンを得ようとしたのですが、「265」と返ってきます。これは正しい値なのかちょっと分からないのでトピックを立てました。
変数の型はintですが違うのでしょうか?また書式は%dですがあっていますか?int型なので当たり前ですが%sにするとフリーズしちゃいました…。
この関数をネットで調べようとしましたが詳しい情報はありませんでした。また自分のPCのWinodwsのバージョンは6.1らしいです。
ちなみにDirectXのバージョンは「458752」というアップデートしすぎのあり得ない値が返ってきました。
 Dango San

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: Windowsバージョン取得について

#2

投稿記事 by h2so5 » 11年前

ソースコードを貼ってください

だんごさん
記事: 273
登録日時: 12年前

Re: Windowsバージョン取得について

#3

投稿記事 by だんごさん » 11年前

コード:

int WindowVer(int WindowVer_x,int WindowVer_y,int DirectVer_x,int DirectVer_y)
{//バージョン
	
	static int Swh_WindowVer = 0;
	static int WindowVer=0,DirectVer=0,DxLibVer=0;	//それぞれのバージョンを入れる変数

	switch(Swh_WindowVer){
		case 0:	//バージョン取得
			if(!_GetSystemInfo(&DxLibVer,&DirectVer,&WindowVer)) //戻り値不明…
				Swh_WindowVer = 1; //取得完了
			else Swh_WindowVer = 2;	//エラー
			break;
		case 1:	//取得出来た場合
			DrawFormatStringToHandle(WindowVer_x,WindowVer_y,GetColor(255,255,255),FontHandle,"Windows Version:%d",WindowVer);
			DrawFormatStringToHandle(DirectVer_x,DirectVer_y,GetColor(255,255,255),FontHandle,"DirectX Version:%d",DirectVer);
			break;
		case 2: //エラーが起きた場合
			DrawFormatStringToHandle(WindowVer_x,WindowVer_y,GetColor(255,255,255),FontHandle,"Windows Version:不明");
			DrawFormatStringToHandle(DirectVer_x,DirectVer_y,GetColor(255,255,255),FontHandle,"DirectX Version:不明");
			break;
	}


	return 0;
}
何かしら汚いですがこんな感じです。
 Dango San

アバター
a5ua
記事: 199
登録日時: 13年前

Re: Windowsバージョン取得について

#4

投稿記事 by a5ua » 11年前

DxLib.hにこんな定義があります。
バージョンの数字を16進数(%x)で表示してみると分かると思います。

コード:

// WINDOWSのバージョンマクロ
#define DX_WINDOWSVERSION_31						(0x000)
#define DX_WINDOWSVERSION_95						(0x001)
#define DX_WINDOWSVERSION_98						(0x002)
#define DX_WINDOWSVERSION_ME						(0x003)
#define DX_WINDOWSVERSION_NT31						(0x104)
#define DX_WINDOWSVERSION_NT40						(0x105)
#define DX_WINDOWSVERSION_2000						(0x106)
#define DX_WINDOWSVERSION_XP						(0x107)
#define DX_WINDOWSVERSION_VISTA						(0x108)
#define DX_WINDOWSVERSION_7							(0x109)
#define DX_WINDOWSVERSION_NT_TYPE					(0x100)

// DirectXのバージョンマクロ
#define DX_DIRECTXVERSION_NON						(0)
#define DX_DIRECTXVERSION_1							(0x10000)
#define DX_DIRECTXVERSION_2							(0x20000)
#define DX_DIRECTXVERSION_3							(0x30000)
#define DX_DIRECTXVERSION_4							(0x40000)
#define DX_DIRECTXVERSION_5							(0x50000)
#define DX_DIRECTXVERSION_6							(0x60000)
#define DX_DIRECTXVERSION_6_1						(0x60100)
#define DX_DIRECTXVERSION_7							(0x70000)
#define DX_DIRECTXVERSION_8							(0x80000)
#define DX_DIRECTXVERSION_8_1						(0x80100)

だんごさん
記事: 273
登録日時: 12年前

Re: Windowsバージョン取得について

#5

投稿記事 by だんごさん » 11年前

返信ありがとうございます。
%xで表示させたところ、Windowsバージョンでは「109」、DirectXのバージョンでは「70000」と出ました。
マクロを見て気付いたのですが、DirectXのバージョンは8.1までしか定義されていませんね。自分のPCはDirectXのバージョンは11です。
 Dango San

だんごさん
記事: 273
登録日時: 12年前

Re: Windowsバージョン取得について

#6

投稿記事 by だんごさん » 11年前

なんか自分で話を切り上げた感じになっちゃいましたが、この109という戻り値をどうバージョン情報として表示させれば良いのでしょうか?
 Dango San

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: Windowsバージョン取得について

#7

投稿記事 by softya(ソフト屋) » 11年前

WindowsAPIをつかっては?
「GetVersionEx 関数」
http://msdn.microsoft.com/ja-jp/library/cc429835.aspx
「Windowsのバージョンの取得」
http://www.westbrook.jp/Tips/Win/OSVersion.html
「OSのバージョンを取得するには GetVersionEx() - メモブロ」
http://d.hatena.ne.jp/shikaku/20110729/p2
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
へにっくす
記事: 634
登録日時: 11年前
住所: 東京都

Re: Windowsバージョン取得について

#8

投稿記事 by へにっくす » 11年前

だんごさん さんが書きました:なんか自分で話を切り上げた感じになっちゃいましたが、この109という戻り値をどうバージョン情報として表示させれば良いのでしょうか?
えっと、、、
自分で表示すればいいんでない?
(^_^;

コード:

char sz[256] = {0}; // サイズは適当
switch (WindowVer) {
case DX_WINDOWSVERSION_31: strcpy(sz, "WINDOWSVERSION_31"); break;
case DX_WINDOWSVERSION_95: strcpy(sz, "WINDOWSVERSION_95"); break;
case DX_WINDOWSVERSION_98: strcpy(sz, "WINDOWSVERSION_98"); break;
case DX_WINDOWSVERSION_ME: strcpy(sz, "WINDOWSVERSION_ME"); break;
case DX_WINDOWSVERSION_NT31: strcpy(sz, "WINDOWSVERSION_NT31"); break;
case DX_WINDOWSVERSION_NT40: strcpy(sz, "WINDOWSVERSION_NT40"); break;
case DX_WINDOWSVERSION_2000: strcpy(sz, "WINDOWSVERSION_2000"); break;
case DX_WINDOWSVERSION_XP: strcpy(sz, "WINDOWSVERSION_XP"); break;
case DX_WINDOWSVERSION_VISTA: strcpy(sz, "WINDOWSVERSION_VISTA"); break;
case DX_WINDOWSVERSION_7: strcpy(sz, "WINDOWSVERSION_7"); break;
default:
if ( WindowVer & DX_WINDOWSVERSION_NT_TYPE )
	strcpy(sz, "WINDOWSVERSION_NT_TYPE");
else
	strcpy(sz, "UNKNOWN"); break;
}
DrawFormatStringToHandle(WindowVer_x,WindowVer_y,GetColor(255,255,255),FontHandle,"Windows Version:%s", sz);
こういうことではなくて?
written by へにっくす

だんごさん
記事: 273
登録日時: 12年前

Re: Windowsバージョン取得について

#9

投稿記事 by だんごさん » 11年前

softya(ソフト屋) さんが書きました:WindowsAPIをつかっては?
そろそろ私も思ってました・・・。
へにっくす さんが書きました:えっと、、、自分で表示すればいいんでない?(^_^;
やはり自分でソース書くしかないんですね・・・。

DxLibではDirectXやWindowsのバージョンのマクロ定義も限界あるのでWinAPIで直接受け取る方がよさそうですね。
ありがとうございました。
 Dango San

閉鎖

“C言語何でも質問掲示板” へ戻る