Code (Text): .code WF db "dwOSVersionInfoSize: %lu",13,10 db "dwMajorVersion: %lu",13,10 db "dwMinorVersion: %lu",13,10 db "dwBuildNumber: %lu",13,10 db "dwPlatformId: %lu",13,10 db "szCSDVersion: %s",13,10 db "wServicePackMajor: %hu",13,10 db "wServicePackMinor: %hu",13,10 db "wSuiteMask: ???",13,10 db "wProductType: ???",0 Main proc local osvi : OSVERSIONINFOEX local buff [1024] : byte mov osvi.dwOSVersionInfoSize,sizeof OSVERSIONINFOEX invoke GetVersionEx,addr osvi invoke wsprintf,addr buff,addr WF,osvi.dwOSVersionInfoSize,osvi.dwMajorVersion,osvi.dwMinorVersion,osvi.dwBuildNumber,osvi.dwPlatformId,addr osvi.szCSDVersion,osvi.wServicePackMajor,osvi.wServicePackMinor invoke MessageBox,0,addr buff,0,MB_OK invoke ExitProcess,0 Main endp end Main как получить wSuiteMask и wProductType ? на osvi.wSuiteMask и osvi.wProductType ругается компилятор.
Да, действительно: Code (Text): Masm OSVERSIONINFOEXA STRUCT dwOSVersionInfoSize DWORD ? dwMajorVersion DWORD ? dwMinorVersion DWORD ? dwBuildNumber DWORD ? dwPlatformId DWORD ? szCSDVersion BYTE 128 dup (?) wServicePackMajor WORD ? wServicePackMinor WORD ? wReserved WORD 2 dup (?) OSVERSIONINFOEXA ENDS MSDN typedef struct _OSVERSIONINFOEX { DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[128]; WORD wServicePackMajor; WORD wServicePackMinor; WORD wSuiteMask; BYTE wProductType; BYTE wReserved; } OSVERSIONINFOEX, *POSVERSIONINFOEX, *LPOSVERSIONINFOEX;
дополнил структуру Code (Text): OSVERSIONINFOEXA STRUCT dwOSVersionInfoSize DWORD ? dwMajorVersion DWORD ? dwMinorVersion DWORD ? dwBuildNumber DWORD ? dwPlatformId DWORD ? szCSDVersion BYTE 128 dup (?) wServicePackMajor WORD ? wServicePackMinor WORD ? wSuiteMask WORD ? wProductType BYTE ? wReserved BYTE ? OSVERSIONINFOEXA ENDS дописал код Code (Text): .code WF db "dwOSVersionInfoSize: %lu",13,10 db "dwMajorVersion: %lu",13,10 db "dwMinorVersion: %lu",13,10 db "dwBuildNumber: %lu",13,10 db "dwPlatformId: %lu",13,10 db "szCSDVersion: %s",13,10 db "wServicePackMajor: %hu",13,10 db "wServicePackMinor: %hu",13,10 db "wSuiteMask: %u",13,10 db "wProductType: %u",0 Main proc local osvi : OSVERSIONINFOEX local buff [1024] : byte mov osvi.dwOSVersionInfoSize,sizeof OSVERSIONINFOEX invoke GetVersionEx,addr osvi invoke wsprintf,addr buff,addr WF,osvi.dwOSVersionInfoSize,osvi.dwMajorVersion,osvi.dwMinorVersion,osvi.dwBuildNumber,osvi.dwPlatformId,addr osvi.szCSDVersion,osvi.wServicePackMajor,osvi.wServicePackMinor,osvi.wSuiteMask,osvi.wProductType invoke MessageBox,0,addr buff,0,MB_OK invoke ExitProcess,0 Main endp end Main но почему-то wProductType получается 256. Я так понимаю что берется еще значение с wReserved и получается 0100h как сюда db "wProductType: %u",0 поместить только 1 байт а не 2 ?
integer, я же бот )), а вы - лентяй, батенька! Code (Text): WF db "dwOSVersionInfoSize: %lu",13,10 db "dwMajorVersion: %lu",13,10 db "dwMinorVersion: %lu",13,10 db "dwBuildNumber: %lu",13,10 db "dwPlatformId: %lu",13,10 db "szCSDVersion: %s",13,10 db "wServicePackMajor: %lu",13,10 db "wServicePackMinor: %lu",13,10 db "wSuiteMask: %lu",13,10 db "wProductType: %lu",0 Code (Text): xor eax, eax mov al, osvi.wProductType push eax mov ax, osvi.wSuiteMask push eax mov ax, osvi.wServicePackMinor push eax mov ax, osvi.wServicePackMajor push eax lea eax, osvi.szCSDVersion push eax push osvi.dwPlatformId push osvi.dwBuildNumber push osvi.dwMinorVersion push osvi.dwMajorVersion push osvi.dwOSVersionInfoSize lea eax, WF push eax lea eax, buff push eax call wsprintf
спасибо большое. теперь понял почему не получалось то, чего я добивался. ведь можешь нормально помогать когда трезвый (: ато по рукам, по рукам ... злой ты