お世話になっております。
先日、MSDNで公開されていたのでインストールしてみました。
自作のアプリで、エクスプローラーの詳細表示で表示可能な項目数、スタートメニュー
もどきが追加されたことによる仮想フォルダ制御などのOSの差を吸収しようとしました。
で、GetVersionEx()でOSのバージョン番号を取得してOSごとに異なる挙動を吸収しよう
としたのですが、今回はこのバージョン番号の判定方法が使えないようです。
GetVersionEx()で値を取得するとWindow8.1ではなく、Windows8と同じ情報を返してき
ています。
OSのバージョン情報で表示されている情報
Ver.6.3 ビルド番号 9600
GetVersionEx()で取得できる値
Ver.6.2 ビルド番号 9200
Shell32.dllのバージョン情報を参照すれば「Ver.,6.3.9600.16384
(winblue_rtm.130821-1623)」こんな文字列が返ってくるので「6.3」やビルド番号は取得
可能ですが、何が正しいと信じて良いのか分からなくなってしまいました。
多分、インストーラーを騙すための措置だと思いますが、他に正確なバージョン番号を
取得する方法はありませんでしょうか?
開発環境はVS2012で、OSはWindows8.1です。
本物が出てくるまではどうなるかわからないとは思いますが、
ひとつ疑問なのは、
OSVERSIONINFOEX verEx;
を使っても取れなかったということでしょうか。
取得できるという情報もあったようですが。
さっそくの回答ありがとうございます。
一応、完成版というかRTMのWindows8.1の話です。
Shell32.dllの方にはrtmと入ってますし。
>OSVERSIONINFOEX verEx;
>を使っても取れなかったということでしょうか。
NT4の時代から使ってたソースを使いまわしていたので、OSVERSIONINFOの方を使っていま
した。
でも、OSVERSIONINFOを使ってるからといって、嘘情報を返して良いという話にはならな
いような気がします。
Windows8まで正しい値を返していたわけですし。
質問しておいてなんですが、ちょっと体調崩しちゃったので復調し次第OSVERSIONINFOEX
の方の検証をしてみます。
ありがとうございました。
to仲澤@失業者さん
とりあえず検証結果の報告です。
OSVERSIONINFOとOSVERSIONINFOEXの違いは無く、同じようにVer.6.2 Build:9200を返し
てきました。
toロマさん
情報の提供ありがとうございます。
マニフェスト定義すれば、GetVersionEx()でも適切な値を返してくるかもしれませんね。
将来、OSごとのGUID文字列がいつ提供されるのか、いささか不安に感じますがこちらで
対処してみようと思います。
後半のリンクは、こういう事情があったのかと背景は理解しましたが、対応方法の正当
性は疑問ですね。
Vistaのサービスパックが何個出るとかMS社ですら予測できなかったでしょうに・・・
今後出てくるであろうAPI名をどうするつもりなのか注視したいと思います。
あと新しいAPIはVS2013にて対応とあるので、とりあえず今回は使用できない手段と考
えておきます。
とりあえず、道筋が見えたので解決済みにしておきます。
ありがとうございました。