喫茶XRAYトップページ

[スレッド全体
]

[9379] Windows10バージョンチェック返信 削除
2015/11/8 (日) 22:41:51 Mr.XRAY
某掲示板で質問で出ていたのでやってみました.
質問者と同じ Delphi 2007
EXE 作成は Windows 7 U64(SP1) + Delphi 2007-R2
コードは以下.アプリケーションマニュフェストを使わないと正しく
取得できません.

Windows のバージョンの値の関係は以下を参照してくださいませ
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724834%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

procedure TForm1.Button1Click(Sender: TObject);
begin
  if CheckWin32Version(10, 0) then begin
    MessageBox(Handle, 'Window 10', 'OS Version', MB_ICONINFORMATION);
  end else begin
    MessageBox(Handle, 'Other Version', 'OS Version', MB_ICONINFORMATION);
  end;
end;

インストールしてから初めて起動した Windows 10 ですが,
やたら動作がもたつきます.何なんだ !?


↓ 合成画像ではありません.一発キャプチャの画像でございやす.
   MessageBox の第一引数を Handle にしないと一発キャプチャできません.

[9380] Re:Windows10バージョンチェック返信 削除
2015/11/8 (日) 23:36:11 Mr.XRAY
> コードは以下.アプリケーションマニュフェストを使わないと正しく
> 取得できません.


WMI だとアプリケーションマニュフェストなしで取得できるようです.
Version のメジャー,マイナーの値は,デリミタを . にして文字列から取り出せます.


[9382] Re2:Windows10バージョンチェック返信 削除
2015/11/9 (月) 08:55:38 おかぽん
▼ Mr.XRAYさん

http://hpcgi3.nifty.com/e-papy/DelphiBBS/wwwlng.cgi?print+201510/15100008.txt

ここで、RtlGetVersion なんてのもありますよ〜とレスしたのですが、
Win7 SP1 でしか確認していませんが、WMI だと、exeを互換モードで実行しても、
常に正しくOSの情報が返るようですね。

GetVersionExは、マニフェスト無しでは偽装される(Windows8以降)。
RtlGetVersionは、GetVersionExと同じ引数で使用でき、マニフェストなしでも
動作しますが、互換モード実行時は互換モードのバージョンが返る。

実にややこしいです。




[9383] Re3:Windows10バージョンチェック返信 削除
2015/11/9 (月) 11:22:47 Mr.XRAY
▼ おかぽんさん

> GetVersionExは、マニフェスト無しでは偽装される(Windows8以降)。
> RtlGetVersionは、GetVersionExと同じ引数で使用でき、マニフェストなしでも
> 動作しますが、互換モード実行時は互換モードのバージョンが返る。
>
> 実にややこしいです。


むむむっ.越後屋,お主ややこしいのぅ.
Windows Vista 以降では,基本的にマニフェストを使用した方がいいようですね.
Windows 7 ではマニフェストがないと,Vista 互換での動作になりますし.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82