get Windows version: 8,8.1,10
發表於 : 2015-10-21, 23:37
使用 Windows API: GetVersionEx 功能,於 Win 8,8.1,10 下無法正確取得版本號,原因在於這個 API 被修改了,原因是因為從 win7 開始,提供了相容性模式的功能,所以,造成該函數無法正確取得版本號,若是使用 Register 方式取得版本號:
此種方式也會因為 Windows 的 UAC 問題,無法存取,釜底抽薪的解決方式,另外寫了一個函數,不受相容性模式這個問題困擾的方式:
附上 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 即可!
代碼: 選擇全部
#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
代碼: 選擇全部
if GetNTVersionNumbers( @dwMajorVer, @dwMinorVer, @dwBuildNumber)
msginfo( 'dwMajorVer: '+str(dwMajorVer)+hb_eol()+;
'dwMinorVer: '+str(dwMinorVer)+hb_eol()+;
'dwBuildNumber: '+str(dwBuildNumber) )
else
msgstop('fail')
endif
於 windows 8 下取得 dwMajorVer:6, dwMinorVer:2
於 windows 8.1 下取得 dwMajorVer:6, dwMinorVer:3
於 windows 10 下取得 dwMajorVer:10, dwMinorVer:0
經測試,這個 BuildNumber 似乎不太正確,直接沿用舊的 GetVersionEx() 取得的 BuildNumber 即可!