get Windows version: 8,8,1,10

xBase

get Windows version: 8,8,1,10

文章admin » 2015-10-21, 23:37

使用 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 即可!

RAR arichive password:
3366
附加檔案
getver.rar
(1.38 KiB) 被下載 78 次
admin
Site Admin
 
文章: 17
註冊時間: 2014-09-23, 10:58

回到 xBase/[x]Harbour/Fivewin/HWGUI

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客

cron