HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0802
あきWindows 8.1 と 10 を識別するには?9解決


あき

リンク

2015/8/2(Sun) 23:41:07|NO.70416

Windows 8.1 と 10 上で sysinfo(0) で OS のバージョン番号を取得すると、「NT 6.2」と返ってきますね。
kernel32 の GetVersionEx() を直接呼んであげても結果は同じですから Windows の仕様でしょう。
マイクロソフトがなぜこんな偽装じみたことをするのかは察せますが。

そこで、Windows 8.1 や 10 を識別するいい方法はないでしょうか?
8.1 や 10 にしかないファイルの存在を確認するか、レジストリを読むかぐらいしか思いつきません。



この記事に返信する


あき

リンク

2015/8/2(Sun) 23:56:40|NO.70417

GetVersionEx() と同じ要領で NTDLL.dll の RtlGetVersion() で正常に取得できました。
お騒がせをしました。

同じように悩んでる方がいらっしゃるかもしれないので

#uselib "NTDLL.dll" #func global RtlGetVersion "RtlGetVersion" sptr dim OSVERSIONINFO, 37 //構造体 OSVERSIONINFO = $94 RtlGetVersion varptr(OSVERSIONINFO) mes "" + OSVERSIONINFO(2) + "." + OSVERSIONINFO(2)



あき

リンク

2015/8/4(Tue) 19:10:27|NO.70465

>7だったら 1.1
それはまずい。

ともかく調べてみると、GetVersionEx() でも実行ファイルのマニフェストで Windows 8.1 への対応を明示すれば正しいバージョン番号が得られる仕様なようです。
ですからリソース ハッカーでマニフェストに supportedOS を追加すれば HSP の sysinfo(0) でも正しいバージョン番号が得られるはずです。たぶん。



あき

リンク

2015/8/4(Tue) 19:36:43|NO.70466

というわけで早速 hsp3.exe のマニフェストにリソース ハッカーで compatibility を追加するも変化なし。
HSP 製実行ファイルに同じ改造を施しても変化なし。
自分のやり方が悪いのだろうけどそう簡単にはいきませんでした。



あき

リンク

2015/8/4(Tue) 20:02:43|NO.70468

試行錯誤しているうちにうまくいきました!
Windows 10 で sysinfo(0) で
WindowsNT ver10.0

が得られました。 参考までに(?)、 hsp3.exe のマニフェストは以下の通り。 Windows Vista、7、8、8.1、10 への対応を明示してあります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="OnionSoftware.hsp3.exe"
type="win32"
/>
<description>XPStyle</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="X86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  <application>
    <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
    <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
    <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
    <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
  </application>
</compatibility>
</assembly> 
いや、参考にする方がいらっしゃるのかは不明ですが。



fofo

リンク

2015/8/5(Wed) 02:55:57|NO.70487

> >7だったら 1.1
> それはまずい。

mes "" + OSVERSIONINFO(2) + "." + OSVERSIONINFO(2) ↓ mes "" + OSVERSIONINFO(1) + "." + OSVERSIONINFO(2)
にしたらちゃんと動作すると思いますよ。



guray(元RubySoft)

リンク

2015/8/5(Wed) 10:17:00|NO.70491

皆さん 覚えてますか?初めての方は初めましてです。
親のPCに故障したPCのHDDを差して復活させました。

上記のfofoさんの通りにやってみるとWindows8.1の場合

6.3
と表記されました。
しかし、Windows10では10.0と表記されるのでしょうか?
6.3と10.0の差がすごい気がします。



b

リンク

2015/8/5(Wed) 10:30:57|NO.70492

>>6.3と表記されました。
しかし、Windows10では10.0と表記されるのでしょうか?
6.3と10.0の差がすごい気がします。

MSが決めたことなので理由は知りませんが
Windows 10では NT10.xという風に更新されました。
で、たまに10ではNT 6.4と認識されてしまうことがあるのでそうならないようにするスレです。



KA

リンク

2015/8/5(Wed) 17:57:21|NO.70508

対応OSをバージョンで識別するタイプのソフトが存在す
るので、その対策として6.xを返すようにしているそう
です。



あき

リンク

2015/8/6(Thu) 00:36:08|NO.70516

>mes "" + OSVERSIONINFO(2) + "." + OSVERSIONINFO(2)
>mes "" + OSVERSIONINFO(1) + "." + OSVERSIONINFO(2)
単純なタイプミスでした、お恥ずかしい。

次の HSP のバージョンアップ時には マニフェストを変更するか、sysinfo(0) が GetVersionEx ではなく RtlGetVersion を使うように変更されることを期待しております。



ONION software Copyright 1997-2021(c) All rights reserved.