[原创]用MASM32编程获取windows类型

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Function: Display the Windows type
; Author:purple endurer
; Develop: MASM32 V8
;Log
;------------------------------------
; 2005-04-29 Create
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
.386
.model  flatstdcall
option  casemap: none
include /masm32/ include/windows.inc
include /masm32/ include/kernel32.inc
include /masm32/ include/user32.inc
includelib /masm32/lib/user32.lib
includelib /masm32/lib/kernel32.lib

GetWinType  PROTO


.data
g_szWin95        db  "Windows 95", 0
g_szWin98        db  "Windows 98", 0
g_szWinMe        db  "Windows Mellinnium", 0
g_szWinNT351     db  "Windows NT 3.51", 0
g_szWinNT40      db  "Windows NT 4.0", 0
g_szWin2000      db  "Windows 2000", 0
g_szWinXP        db  "Windows XP", 0
g_szWin2003      db  "Windows Server 2003", 0
g_szUnknow       db  "Unknow", 0

.data?
g_OsVerInfo OSVERSIONINFO <>

.code
start:
     mov g_OsVerInfo.dwOSVersionInfoSize,  SIZEOF OSVERSIONINFO
     invoke  GetVersionExADDR g_OsVerInfo
     .if  eax != 0
         invoke GetWinType
         invoke  MessageBox, NULL,  eaxeax, MB_OK
     .endif
     invoke  ExitProcess, NULL

;//
;Function: Get the Windows type
; Input: g_OsVerInfo
; Output: Pointer to the string of windows type
;//
GetWinType  proc
     push  ebx     ;用ebx作为临时变量
     mov  eaxOFFSET g_szUnknow ;假设返回值为Unknow
     mov  ebx, g_OsVerInfo.dwPlatformId
     .if   ebx==1
         mov  ebx, g_OsVerInfo.dwMinorVersion
         .IF  ebx==0
             mov  eaxOFFSET g_szWin95
         .ELSEIF  ebx==10
             mov  eaxOFFSET g_szWin98
         .ELSEIF  ebx==90
             mov  eaxOFFSET g_szWinMe
         .ENDIF
     .elseif  ebx==2
         mov  ebx, g_OsVerInfo.dwMajorVersion
         .IF  ebx==3
             mov  eaxOFFSET g_szWinNT351
         .ELSEIF  ebx==4
             mov  eaxOFFSET g_szWinNT40
         .ELSEIF  ebx==5
             mov  ebx, g_OsVerInfo.dwMinorVersion
             .if  ebx==0
                 mov  eaxOFFSET g_szWin2000
             .elseif  ebx==1
                 mov  eaxOFFSET g_szWinXP
             .elseif  ebx==2
                 mov  eaxOFFSET g_szWin2003
             .endif
         .ENDIF
     .endif

     pop  ebx

     ret
GetWinType  endp

end start
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫郢剑侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值