get Windows version: 8,8.1,10

xBase/clipper
回覆文章
admin
Site Admin
文章: 53
註冊時間: 2014-09-23, 10:58

get Windows version: 8,8.1,10

文章 admin »

使用 Windows API: GetVersionEx 功能,於 Win 8,8.1,10 下無法正確取得版本號,原因在於這個 API 被修改了,原因是因為從 win7 開始,提供了相容性模式的功能,所以,造成該函數無法正確取得版本號,若是使用 Register 方式取得版本號:

代碼: 選擇全部

#define  HKEY_LOCAL_MACHINE  2147483650  // 0x80000002

function IsWindows10()

   local oReg := TReg32():New( HKEY_LOCAL_MACHINE,;
                               "SOFTWARE\Microsoft\Windows NT\CurrentVersion",;
                               .f. )
   local cProductName := oReg:Get( "ProductName" )

   oReg:Close()

return "Windows 10" $ cProductName
此種方式也會因為 Windows 的 UAC 問題,無法存取,釜底抽薪的解決方式,另外寫了一個函數,不受相容性模式這個問題困擾的方式:

代碼: 選擇全部

if GetNTVersionNumbers( @dwMajorVer, @dwMinorVer, @dwBuildNumber)
   msginfo( 'dwMajorVer: '+str(dwMajorVer)+hb_eol()+;
            'dwMinorVer: '+str(dwMinorVer)+hb_eol()+;
            'dwBuildNumber: '+str(dwBuildNumber) )
else
   msgstop('fail')
endif
附上 for BCC .obj 提供測試!!

於 windows 8 下取得 dwMajorVer:6, dwMinorVer:2
於 windows 8.1 下取得 dwMajorVer:6, dwMinorVer:3
於 windows 10 下取得 dwMajorVer:10, dwMinorVer:0

經測試,這個 BuildNumber 似乎不太正確,直接沿用舊的 GetVersionEx() 取得的 BuildNumber 即可!

3366
附加檔案
getver.rar
(1.38 KiB) 已下載 3218 次
line ID: ssbbstw
WeChat ID: ssbbstw
回覆文章