purebasic.info

PureBasic forum
Текущее время: Пт янв 19, 2018 10:47 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Определяем версию винды +
СообщениеДобавлено: Чт дек 06, 2012 11:54 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
;  http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833(v=vs.85).aspx
;  http://msdn.microsoft.com/en-us/library/windows/desktop/ms724429(v=vs.85).aspx
 
;  Author: Pablov
;  06.12.2012
;  PureBasic 4.60
;  Only for Windows
 
  #PROCESSOR_ARCHITECTURE_AMD64         = 9
  #PROCESSOR_ARCHITECTURE_IA64          = 6
  #PROCESSOR_ARCHITECTURE_INTEL         = 0
  #PROCESSOR_ARCHITECTURE_UNKNOWN       = $FFFF
 
  #PRODUCT_ULTIMATE                     = 1
  #PRODUCT_PROFESSIONAL                 = $30
  #PRODUCT_HOME_PREMIUM                 = 3
  #PRODUCT_HOME_BASIC                   = 2
  #PRODUCT_ENTERPRISE                   = 4
  #PRODUCT_BUSINESS                     = 6
  #PRODUCT_STARTER                      = $0B
  #PRODUCT_CLUSTER_SERVER               = $12
  #PRODUCT_DATACENTER_SERVER            = 8
  #PRODUCT_DATACENTER_SERVER_CORE       = $0C
  #PRODUCT_ENTERPRISE_SERVER            = $0A
  #PRODUCT_ENTERPRISE_SERVER_CORE       = $0E
  #PRODUCT_ENTERPRISE_SERVER_IA64       = $0F
  #PRODUCT_SMALLBUSINESS_SERVER         = 9
  #PRODUCT_SMALLBUSINESS_SERVER_PREMIUM = $19
  #PRODUCT_STANDARD_SERVER              = 7
  #PRODUCT_STANDARD_SERVER_CORE         = $0D
  #PRODUCT_WEB_SERVER                   = $11
  #PRODUCT_WEB_SERVER_CORE              = $1D
 
Procedure.s pGetProductInfo(Major.l, Minor.l)
  Protected kernel32.l, dwType.l, sType.s
  kernel32 = OpenLibrary(0, "Kernel32.dll")
  If kernel32
     *pGPI = GetFunction(0,"GetProductInfo")
     If *pGPI
          CallFunctionFast(*pGPI, Major, Minor, 0, 0, @dwType)
          Select dwType
            Case #PRODUCT_ULTIMATE
               sType = "Ultimate Edition"
            Case #PRODUCT_PROFESSIONAL
               sType = "Professional"
            Case #PRODUCT_HOME_PREMIUM
               sType = "Home Premium Edition"
             Case #PRODUCT_HOME_BASIC
               sType = "Home Basic Edition"
            Case #PRODUCT_ENTERPRISE
               sType = "Enterprise Edition"
            Case #PRODUCT_BUSINESS
               sType = "Business Edition"
            Case #PRODUCT_STARTER:
               sType = "Starter Edition"
            Case #PRODUCT_CLUSTER_SERVER
               sType = "Cluster Server Edition"
            Case #PRODUCT_DATACENTER_SERVER
               sType = "Datacenter Edition"
            Case #PRODUCT_DATACENTER_SERVER_CORE
               sType = "Datacenter Edition (core installation)"
            Case #PRODUCT_ENTERPRISE_SERVER
               sType = "Enterprise Edition"
            Case #PRODUCT_ENTERPRISE_SERVER_CORE
               sType = "Enterprise Edition (core installation)"
            Case #PRODUCT_ENTERPRISE_SERVER_IA64
               sType = "Enterprise Edition for Itanium-based Systems"
            Case #PRODUCT_SMALLBUSINESS_SERVER
               sType = "Small Business Server"
            Case #PRODUCT_SMALLBUSINESS_SERVER_PREMIUM
               sType = "Small Business Server Premium Edition"
            Case #PRODUCT_STANDARD_SERVER
               sType = "Standard Edition"
            Case #PRODUCT_STANDARD_SERVER_CORE
               sType = "Standard Edition (core installation)"
            Case #PRODUCT_WEB_SERVER
               sType = "Web Server Edition"
            Case #PRODUCT_WEB_SERVER_CORE
               sType = "Web Server Edition (core installation)"
            Default    
               sType = ""
          EndSelect    
          CloseLibrary(0)
          ProcedureReturn sType
     EndIf      
  EndIf
    ProcedureReturn "Unknown Edition"
EndProcedure
 
Procedure Is64Bit()                  ; Разрядность ОС
  Protected retVal, kernel32
  kernel32 = OpenLibrary(0, "Kernel32.dll")
  If kernel32
     *IsWow64 = GetFunction(0,"IsWow64Process")
     If *IsWow64
       CallFunctionFast(*IsWow64, GetCurrentProcess_(), @retVal)
       CloseLibrary(0)
       ProcedureReturn retVal
     EndIf
   EndIf    
   ProcedureReturn -1
EndProcedure
 
Procedure.s DisplaySystemVersion()
  Protected osvi.OSVERSIONINFOEX
  Protected bOsVersionInfoEx.b
  Protected txtVer.s, product.s = ""
  Protected si.SYSTEM_INFO
  GetSystemInfo_(si)
  FillMemory(osvi, SizeOf(OSVERSIONINFOEX))
  osvi\dwOSVersionInfoSize = SizeOf(OSVERSIONINFOEX)
  bOsVersionInfoEx = GetVersionEx_(@osvi)
 If bOsVersionInfoEx
         txtVer = "Microsoft "  
         If osvi\dwMajorVersion = 5 And osvi\dwMinorVersion = 0
               txtVer = txtVer + "Windows 2000 "
               If osvi\wProductType = #VER_NT_WORKSTATION          
                  txtVer = txtVer + "Professional"
               ElseIf osvi\wSuiteMask & #VER_SUITE_DATACENTER  
                  txtVer = txtVer + "Datacenter Server"
               ElseIf osvi\wSuiteMask & #VER_SUITE_ENTERPRISE
                  txtVer = txtVer + "Advanced Server"
               Else
                  txtVer = txtVer + "Server"
               EndIf  
         ElseIf osvi\dwMajorVersion = 5 And osvi\dwMinorVersion = 1  
               txtVer = txtVer + "Windows XP "
               If osvi\wSuiteMask & #VER_SUITE_PERSONAL
                  txtVer = txtVer + "Home Edition "
               Else
                  txtVer = txtVer + "Professional "          
               EndIf
         ElseIf osvi\dwMajorVersion = 5 And osvi\dwMinorVersion = 2
               If osvi\wProductType = #VER_NT_WORKSTATION And si\wProcessorArchitecture = #PROCESSOR_ARCHITECTURE_AMD64
                   txtVer = txtVer + "Windows XP Professional x64 Edition "
               EndIf
               If GetSystemMetrics_(#SM_SERVERR2) = 0
                   txtVer = txtVer + "Windows Server 2003 "
               EndIf
               If osvi\wSuiteMask & #VER_SUITE_WH_SERVER
                   txtVer = txtVer + "Windows Home Server "
               EndIf
               If GetSystemMetrics_(#SM_SERVERR2) <> 0
                   txtVer = txtVer + "Windows Server 2003 R2 "
               EndIf
               If osvi\wSuiteMask & #VER_SUITE_STORAGE_SERVER
                   txtVer = txtVer + "Windows Storage Server 2003 "
               EndIf
         ElseIf osvi\dwMajorVersion = 6 And osvi\dwMinorVersion = 0  
               If osvi\wProductType = #VER_NT_WORKSTATION
                   txtVer = txtVer + "Windows Vista "
               EndIf
               If osvi\wProductType <> #VER_NT_WORKSTATION
                   txtVer = txtVer + "Windows Server 2008 "
               EndIf
               Select Is64Bit()
                 Case 1  
                   txtVer = txtVer + "x64 "
                 Case 0  
                   txtVer = txtVer + "x32 "
               EndSelect    
               product = pGetProductInfo(osvi\dwMajorVersion, osvi\dwMinorVersion)
         ElseIf osvi\dwMajorVersion = 6 And osvi\dwMinorVersion = 1  
               If osvi\wProductType <> #VER_NT_WORKSTATION
                   txtVer = txtVer + "Windows Server 2008 R2 "
               EndIf
               If osvi\wProductType = #VER_NT_WORKSTATION
                   txtVer = txtVer + "Windows 7 "
               EndIf
               Select Is64Bit()
                 Case 1  
                   txtVer = txtVer + "x64 "
                 Case 0  
                   txtVer = txtVer + "x32 "
               EndSelect    
               product = pGetProductInfo(osvi\dwMajorVersion, osvi\dwMinorVersion)
         ElseIf osvi\dwMajorVersion = 6 And osvi\dwMinorVersion = 2
               If osvi\wProductType <> #VER_NT_WORKSTATION
                   txtVer = txtVer + "Windows Server 2012 "
               EndIf
               If osvi\wProductType = #VER_NT_WORKSTATION
                   txtVer = txtVer + "Windows 8 "
               EndIf
               product = pGetProductInfo(osvi\dwMajorVersion, osvi\dwMinorVersion)
         EndIf
     ProcedureReturn  txtVer + "ver " + Str(osvi\dwMajorVersion) + "." + Str(osvi\dwMinorVersion) + " build " +  Str(osvi\dwBuildNumber) + " " + PeekS(@osvi\szCSDVersion) + " " + product      
 EndIf
  ProcedureReturn ""
EndProcedure  
 
MessageRequester("OS Version", DisplaySystemVersion(), #MB_OK|#MB_ICONINFORMATION)



Проверял на
Цитата:
Microsoft Windows 7 x64 ver 6.1 build 7601 Service Pack 1 Ultimate Edition

Microsoft Windows 7 x32 ver 6.1 build 7600 Service Pack 2 Ultimate Edition

Microsoft Windows XP Professional ver 5.1 build 2600 Service Pack 3

У кого есть другая винда, прошу испытать и отписаться :)
Особенно интересуют серверные оси (x32/x64)

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Последний раз редактировалось pablov Пт дек 07, 2012 12:51 pm, всего редактировалось 5 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 07, 2012 12:12 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
Цитата:
Microsoft Windows 7 x32 ver 6.1 build 7600 Ultimate Edition

Правда в строке есть лишние пробелы (по два).

162, 164 и 178 перед PeekS(@osvi\szCSDVersion).

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 07, 2012 12:55 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
qpAHToMAS писал(а):
Правда в строке есть лишние пробелы

Убрал
qpAHToMAS писал(а):
Цитата: Microsoft Windows 7 x32 ver 6.1 build 7600 Ultimate Edition

Почему-то сервис пак у тебя не показывает (PeekS(@osvi\szCSDVersion) ) :?:

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 07, 2012 3:28 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
pablov писал(а):
Почему-то сервис пак у тебя не показывает (PeekS(@osvi\szCSDVersion) ) Question

Так он видимо и не стоит у меня? Я сам этими Service Pack'ами интересовался только во времена Windows XP.

Более того, если верить Википедии:
Цитата:
25 октября 2012 г. стало известно, что Майкрософт не планирует выпускать второй пакет обновления (SP2) для Windows 7.

То откуда твой код берет "Service Pack 2"? В смысле может брать, судя по твоим тестам.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 07, 2012 5:34 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
Цитата:
Microsoft Windows 8 ver 6.2 build 9200

Цитата:
Microsoft Windows 7 x32 ver 6.1 build 7601 Service Pack 1 Ultimate Edition

XP без SP ( проверяю на ней на совместимость свои проги)
Цитата:
Microsoft Windows XP Professional ver 5.1 build 2600

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 07, 2012 8:19 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
qpAHToMAS писал(а):
То откуда твой код берет "Service Pack 2"? В смысле может брать, судя по твоим тестам.

Х.з. Сама винда про это говорит. Причем, установлена уже давно
Изображение

kvitaliy писал(а):
Microsoft Windows 8 ver 6.2 build 9200

О, у тебя восьмерка стоит. Разремь строчку
Код:
1
;   product = pGetProductInfo(osvi\dwMajorVersion, osvi\dwMinorVersion)


И прогони на восьмерке. Интересно, в win 8 GetProductInfo() работает

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 07, 2012 8:43 am 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6223
Благодарил (а): 16 раз.
Поблагодарили: 173 раз.
Пункты репутации: 48
pablov писал(а):
Интересно, в win 8 GetProductInfo() работает

Да, добавилось то, что на 7-ке и без этой строчки показывает:

Цитата:
Microsoft Windows 8 ver 6.2 build 9200 Professional


А вообще эта информация в 8-ке написана по умолчанию прямо на рабочем столе в нижнем правом углу, только по-русски.

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт дек 07, 2012 8:50 am 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
kvitaliy писал(а):
Цитата: Microsoft Windows 8 ver 6.2 build 9200 Professional

Ага, спасибо. Значит надо разремить

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Определяем версию винды +
СообщениеДобавлено: Вс ноя 15, 2015 5:00 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт окт 31, 2008 4:49 pm
Сообщений: 716
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Цитата:
Microsoft Windows 7 x32 ver 6.1 build 7601 Service Pack 1 Ultimate Edition


На самом деле Win 7 х64

_________________
мой форум http://spaceminers.mybb2.ru
Dungeon Raider (Ogre). Game video: http://www.youtube.com/watch?v=ZlhBgPJhAxI


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Определяем версию винды +
СообщениеДобавлено: Ср фев 03, 2016 12:56 am 
Не в сети
студент

Зарегистрирован: Пн июл 01, 2013 10:54 am
Сообщений: 8
Откуда: Краснодар
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
AndyLy писал(а):
Цитата:
Microsoft Windows 7 x32 ver 6.1 build 7601 Service Pack 1 Ultimate Edition


На самом деле Win 7 х64

- то же самое на семёрке х64


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Определяем версию винды +
СообщениеДобавлено: Ср фев 03, 2016 5:08 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
AndyLy, Opitim
Вы скорей всего этот код компилируете в 64 версии PureBasic. Если это так, то читаем MSDN и включаем мозг :D
64-битный код запустится только в 64-битной ОС, поэтому в этом случае проверка на разрядность оси не нужна (можно смело писАть х64)
Функция IsWow64Process, показывает, не запущен ли ваш 32-разрядный процесс в режиме эмуляции WOW64
Тут и я лоханулся, нужно было в коментах указать это

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB