Определить версию Windows
|
dolphin
|
Дата: Четверг, 22.03.2012, 13:31 | Сообщение # 1
|
Администратор
Сообщений: 904
Статус: Offline
|
Нужно определить какая версия Windows установлена, примеры которые можно найти определяют либо до ХР либо работают из под учётки админа вроде бы (определяют через реестр)
У кого какие варианты есть?
Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
|
|
|
|
|
Волк-1024
|
Дата: Четверг, 22.03.2012, 13:50 | Сообщение # 2
|
Авторитетный
Зарегистрирован: 24.07.2011
Группа: Модераторы
Сообщений: 469
Статус: Offline
|
Доступно только для пользователей
Вроде работет...
Pascal, C\C++, Assembler, Python
Сообщение отредактировал Волк-1024 - Четверг, 22.03.2012, 13:53
|
|
|
|
|
dolphin
|
Дата: Четверг, 22.03.2012, 14:16 | Сообщение # 3
|
Администратор
Сообщений: 904
Статус: Offline
|
Спасибо, вот эта информация кстати пригодилась Тык
Исходный код с доработкой
Доступно только для пользователей
Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
Сообщение отредактировал dolphin - Четверг, 22.03.2012, 15:18
|
|
|
|
|
xXxSh@dowxXx
|
Дата: Четверг, 22.03.2012, 21:21 | Сообщение # 4
|
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
|
отличная информация, думаю пригодится, благодарю 
я вот только не совсем понял вот эту часть кода:
Code
if info.dwBuildNumber = 6000 then
Result := 'Windows Vista';
if info.dwBuildNumber > 6000 then
Result := 'Windows Vista сборка '+IntToStr(info.dwBuildNumber);
и эту аналогично...
Code
if info.dwBuildNumber = 7600 then
Result := 'Windows 7';
if info.dwBuildNumber > 7600 then
Result := 'Windows 7 сборка '+IntToStr(info.dwBuildNumber);
получается что он тебе будет выдавать оба ответа или я что то упустил, ведь исключения то одинаковые?
Сообщение отредактировал xXxSh@dowxXx - Четверг, 22.03.2012, 21:22
|
|
|
|
|
dolphin
|
Дата: Четверг, 22.03.2012, 22:23 | Сообщение # 5
|
Администратор
Сообщений: 904
Статус: Offline
|
6000 и 7600 это чистые версии, а вот уже после них вроде идут сборки как я понял. Запусти у себя, поймёшь что 2 ответа не будет.
Кстати Windows 7 и Windows Server 2008 R2 имеют 6.1.7600 я пока не разобрался как их отличить.
По сути конешно это те же виста и 7 тогда можно упростить и сделать
Code
if info.dwBuildNumber >= 6000 then
Result := 'Windows Vista';
Code
if info.dwBuildNumber >= 7600 then
Result := 'Windows 7';
Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
Сообщение отредактировал dolphin - Четверг, 22.03.2012, 23:06
|
|
|
|
|
xXxSh@dowxXx
|
Дата: Пятница, 23.03.2012, 00:11 | Сообщение # 6
|
Авторитетный
Зарегистрирован: 22.01.2012
Группа: Модераторы
Сообщений: 702
Статус: Offline
|
Quote (dolphin)
6000 и 7600 это чистые версии, а вот уже после них вроде идут сборки
Аа.., даже так..,тогда да, я прост не знал что сборки имеют выше параметр 
Quote (dolphin)
Кстати Windows 7 и Windows Server 2008 R2 имеют 6.1.7600 я пока не разобрался как их отличить.
в принципе за разницу можно взять дополнительную проверку на любой другой параметр, который не может быть в обоих этих системах, к сожалению под рукой нет ни семерки ни сервера, не могу проверить, но думаю это вовсе не проблема...
Сообщение отредактировал xXxSh@dowxXx - Пятница, 23.03.2012, 11:11
|
|
|
|
|
cool1
|
Дата: Суббота, 24.03.2012, 14:39 | Сообщение # 7
|
Участник
Зарегистрирован: 14.07.2010
Группа: Пользователи
Сообщений: 238
Статус: Offline
|
Насчет работы с wnidows, у меня исходничек есть лови.

Если компонентов требуемых нет, то пропускай.
Автор: не я.
Источник: утерян.

За помощь ставьте +!
Сообщение отредактировал cool1 - Воскресенье, 25.03.2012, 06:35
|
|
|
|
|
dolphin
|
Дата: Воскресенье, 25.03.2012, 14:17 | Сообщение # 8
|
Администратор
Сообщений: 904
Статус: Offline
|
cool1, Ничего нового там не нашёл, но всёравно спасибо!
Пиреписал сишнию структуру из мсдн
Доступно только для пользователей
по идее PType : Byte; должно было определить тип системы- серверная или нет.
но всёравно не определяет.
Окончательный вариант пока такой
Доступно только для пользователей
Система: Windows 10 x64, Windows XP
Среды программирования: Delphi 7, Delphi 10 Seattle
Я не профессионал, я всего лишь любитель
Я не вредитель, я всего лишь теоретик
Сообщение отредактировал dolphin - Воскресенье, 25.03.2012, 14:18
|
|
|
|
|
XSPY
|
Дата: Воскресенье, 25.03.2012, 19:01 | Сообщение # 9
|
Продвинутый
Зарегистрирован: 28.01.2010
Группа: Пользователи
Сообщений: 263
Статус: Offline
|
dolphin, глянь на ачате пост SLESH'a-у него лучшая в нете (на СИ) реализация определения версии...
Я не крекер,а программист!
Я не преступник-я свободный человек!
Лучше один раз накодить,чем сто раз качать билды!
|
|
|
|
|
C@T
|
Дата: Суббота, 31.03.2012, 18:15 | Сообщение # 10
|
Авторитетный
Зарегистрирован: 06.03.2010
Группа: Модераторы
Сообщений: 265
Статус: Offline
|
Code
string OsVer() {
OSVERSIONINFO v;
ZeroMemory(&v, sizeof(OSVERSIONINFO));
v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&v);
return "NT " +
IntToStr(v.dwMajorVersion)+"."+
IntToStr(v.dwMinorVersion)+"."+
IntToStr(v.dwBuildNumber)+" "+v.szCSDVersion;
}
структура вот(взял из студии),
Code
typedef struct _OSVERSIONINFOA {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
CHAR szCSDVersion[ 128 ]; // Maintenance string for PSS usage
} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
всегда юзал так, вродебы хватало 
P.S простите за c++
|
|
|
|
|