ページ 11

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

Posted: 2012年11月23日(金) 14:11
by だんごさん
_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」というアップデートしすぎのあり得ない値が返ってきました。

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

Posted: 2012年11月23日(金) 14:24
by h2so5
ソースコードを貼ってください

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

Posted: 2012年11月23日(金) 14:36
by だんごさん

コード:

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;
}
何かしら汚いですがこんな感じです。

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

Posted: 2012年11月23日(金) 18:12
by a5ua
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)

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

Posted: 2012年11月23日(金) 19:07
by だんごさん
返信ありがとうございます。
%xで表示させたところ、Windowsバージョンでは「109」、DirectXのバージョンでは「70000」と出ました。
マクロを見て気付いたのですが、DirectXのバージョンは8.1までしか定義されていませんね。自分のPCはDirectXのバージョンは11です。

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

Posted: 2012年11月23日(金) 22:02
by だんごさん
なんか自分で話を切り上げた感じになっちゃいましたが、この109という戻り値をどうバージョン情報として表示させれば良いのでしょうか?

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

Posted: 2012年11月23日(金) 22:14
by softya(ソフト屋)
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

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

Posted: 2012年11月23日(金) 22:15
by へにっくす
だんごさん さんが書きました:なんか自分で話を切り上げた感じになっちゃいましたが、この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);
こういうことではなくて?

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

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

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