Delphi определение версии windows

Определение версии Windows

Посмотрите в электронной справке API и модуле WINPROCS описание и декларацию функции GetVersion: LongInt;

Функция GetVersion возвращает текущие номера версий операционных систем Windows и MS-DOS.

Примечание: в оригинальной документации по API-функциям есть ошибка: возвращаются обе версии Win — общая и сборки (major/minor)!

Результаты использования функции:

Windows 3.1 возвращает 3.1, WIN95 возвращает 3.95

Примечание Под windows 95 и выше используйте функцию GetVersionEx

К большому сожалению с помощью функции GetVersionEx нельзя определить «точно» версию Windows. Можно у знать номер, описание платформы (Win32&95, Win32, nonWin32), но назвать ее сложно. Возвращаемый результат имеет такую структуру:

  • dwOSVersionInfoSize
  • dwMajorVersion
  • dwMinorVersion
  • dwBuildNumber
  • dwPlatformId
  • szCSDVersion

Для людей, которым нужно просто «обозвать» Windows типа «Windows95» или «Windows98» советую читать это из глубин реестра или воспользоваться следующей функцией:

function GetWinVersion:String;
<не забудьте подключить модуль Registry>
var

Если у меня NT, то ключа
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Version
нет по определению, есть например
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion

Вопрос об удобной функции для определения версии Windows остается открытым. [000278]

Материалы, которые находятся на этой страничке, любезно предоставлены Игорем Ивановым

Информация об ОС в Delphi

Здравствуйте!
Как в Delphi получить информация об установленной на компе ОС? Ну так какая ОС сколько разрядов, когда установлена имя пользователя в системе!

Если сложно всех ОС дайте инфу хотя-бы по Windows! Ну чтобы определяло только какая Windows стоит.

Информация о Win на Delphi
Доброго времени суток всем!Надо открыть xml-файл. Путь: Xp -Диск с ОС:\documents and.

Расчет стипендии в Delphi 7 информация считываеться с БД
помогите разобраться нужно что бы расчитывал стипендию от отценки по нажатию на кнопку но у меня не.

Delphi post и GET запросы, базовая информация
Дайте ссылку на учебник на русском или приведите человеческие примеры, а то найти не получается.

Delphi и клиент-сервер. вся информация внутри
Прошу, помочь объяснениями и советами в 1 ом проекте. Нужен хороший специалист в delphi на тему.

Решение

Читаем все из реестра:

Заносим данные в файл(можно вывести на экран, занести в переменную и т.д):

Добавлено через 16 минут
Ну и вопрос! Это же не все:

Если не все, то как посмотреть что еще о системе можно вытащить с реестра?

Добавлено через 1 минуту
Ну например еще тип системы: Сколько разрядная и Имя ПК.

Добавлено через 1 час 51 минуту
Все нашел! Я просто искал в Windows а нужно WindowsNT!

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

В DBEdit остается информация с прежнего запуска (Delphi 7)
Здравствуйте ! подскажите пожалуйста ! у меня программа к ней привязана база данных ! я ее заполняю.

Как узнать реальную версию Windows из режима совместимости

Думаю каждый хотя бы раз сталкивался с ситуацией, когда на современной ОС не удавалось запустить старую программу, и помогал в этом случае режим совместимости Windows.

В основе работы данного механизма лежит перехват различных функций и эмуляция их поведения, свойственного указанной версии Windows, например, эмулируются ключи реестра, каталоги с документами и прочее. Все это нужно для того, чтобы программа думала, что запущена в выбранной среде.

Если приложение запущено в режиме совместимости, то вызов GetVersionEx вернет фиктивную версию Windows, что, вероятно, не подойдет для системных программ типа твикеров ОС. Как быть в этом случае?

Анализ экспортируемых функций

На просторах сети наткнулся на способ детектирования по наличию/отсутствию экспортируемых функций у системных библиотек. Пример кода:

Решение интересное, но не считаю его приемлемым, так как с выходом каждой версии Windows требуется нетривиальная поддержка.

Используя WMI

Windows Management Instrumentation (WMI) в дословном переводе — это инструментарий управления Windows. Если говорить более развернутo, то WMI — это одна из базовых технологий для централизованного управления и слежения за работой различных частей компьютерной инфраструктуры под управлением платформы Windows.

Из WMI можно получить и версию Windows. Из документации следует что это можно сделать таким запросом:

SELECT Version FROM Win32_OperatingSystem

Запустив WMI Explorer в режиме совместимости с Windows XP, можно увидеть, что это значение не эмулируется:

Метод работает, более того, он полностью документирован, но медленный, и требует тянуть в проект кучу кода по работе с WMI.

Ищем в реестре

Пожалуй самый элегантный и правильный способ найденный в сети — это подсмотреть значение в реестре:
HLKM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion
Ну что же, попробуем:

К сожалению, проверив его на Windows 7 оказалось, что этот ключ реестра эмулируется. Похоже в предыдущих версиях Windows этот способ работал, но, увы — сейчас этот трюк не сработает.

Анализ версии kernel32.dll

Сам не проверял, но говорят, что версия файла у kernel32.dll совпадает с версией Windows. На моем компьютере с Windows 7 это так:

Вполне пригодный способ, но лично мне по непонятным причинам он не нравится, благо есть еще альтернатива.

Анализируем PEB процесса

У каждого Windows-процесса есть структура описывающая его, называется она PEB. Она заполняется при старте процесса и содержит в себе адрес загрузки, список загруженных модулей, параметры командной строки, и, в том числе, версию Windows. Ниже пример модуля, используя который можно получить реальную версию Windows (тестировался на Delphi 2010 Win32):

Скорость работы моментальная, ничего лишнего, единственное НО — недокументированная структура PEB, но как известно Microsoft очень заботится об обратной совместимости, так что с большой долей оптимизма можно считать, что раз описание структуры давно бродит по интернету, то в Microsoft она уже считается документированной.

Определение версии и разрядности Windows в Delphi 6 и применение манифеста

Создание манифеста для программы на Delphi 6 о том что программа поддерживает Windows 10

Начну с того что данный способ определения версий windows для операционных систем выше Windows 8.0 будет корректно работать только при подключении манифеста, а именно например строчкой supportedOS внутри файла манифеста Вы должны явным образом указать какие операционные системы поддерживает Ваша программа. Иначе версия для ОС старше Windows 8.0 будет определяться как Windows 8.0.

Для создания файла манифеста создайте файл с названием и расширением Project1.exe.manifest и разместите в нём следующий текст в UTF-8 кодировке(я написал в названии файла Project1.exe.manifest поскольку моя программа называлась именно так):

Далее создайте файл с названием и расширением manifest.rc и поместите в него следующий текст:

1 24 «Project1.exe.manifest»

После этого в командной строке перейдите в папке где находятся файлы Project1.exe.manifest и manifest.rc(для перехода в папку используется команда cd адрес) и выполните следующий код:

Если команда выполнилась успешно в папке появится файл manifest.res если выполнение произошло с ошибкой, то почитайте какие файлы нужны для выполнения brcc32.exe в этой статье.

Полученный с помощью выполнения указанной выше команды файл manifest.res поместите в папку проекта на Delphi, непосредственно в коде проекта манифест подключается стройкой <$R manifest.res>в implementation в листинге программы, который я приведу в статье ниже данная строчка будет присутствовать.

Файлы для сборки манифеста из примера и получившийся файл .res я разместил в этом архиве, поэтому Вы можете не проделывать все указанные действия а скачать файлы и отредактировать их под себя.

Определение версии Windows в Delphi 6

Определить версию операционной системы Windows в Delphi 6 можно используя Win32Platform, Win32MajorVersion, Win32MinorVersion и Win32BuildNumber. Для примера создадим в Delphi новый проект и на форме разместим Memo1 и Button1 далее заменим весь код проекта на код из листинга:

Для операционной системы Windows 10 Win32MajorVersion будет равен 10, а Win32MinorVersion — 0. Сочетания для других версий операционных систем можно найти в интернет.

Так же версия операционной системы может быть каким то образом определена исходя из менений в Интернет с использованием экземпляра объекта OSVersionInfo, как именно я пока не разбирался.

Функция для Delphi определения является ли Windows 64 битным

Так же иногда может потребоваться узнать является ли Windows на котором запускается программа 64-х разрядным. Для определения можно воспользоваться функцией из листинга ниже, которая возвращает True если программа запущена на 64-х битном Windows. Для использования данной функции подключение выше описанного манифеста не требуется.

Вы так же можете прочитать следующие статьи:

Delphi определение версии windows

Приветствую Вас, мастера.
Помогите! Интересует вопрос, как программно определить версию Windows (типа какой он, 95, 98 или 2000 и т.п.).
Может быть, есть функция или что-нибудь подобное.
По возможности, если не функция, то очень прошу исходник (здесь или на мыло).
За ранее благодарю.


Dimka Maslov ( 2002-03-28 13:26 ) [1]


drpass ( 2002-03-28 14:05 ) [2]

Это в том случае, если тебе неохота качать немеренно полезный и незаменимый для каждого программера модуль dim.pas :)))
GetWindowsMajorVersion + GerWindowsMinorVersion;
95/NT — 4.0
98 — 4.1
Me — 4.9
2000 — 5.0
XP — 5.1
Переменная Win32Platform позволяет узнать, какая платформа.
VER_PLATFORM_WIN32_WINDOWS — Win9x, VER_PLATFORM_WIN32_WINNT — WinNT


SPeller ( 2002-03-28 14:49 ) [3]

Или если нужна просто строчка с названием, то можно взять с
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProductName или HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Version


Dimka Maslov ( 2002-03-28 18:04 ) [4]

>drpass
Кому неохота качать, номер версии у 98 — 4.10, а у ME — 4.90

>Dimka Maslov
Прошу прощения, что задел Ваше чувство собственного достоинства. Просто Ваш ответ был слегка, так сказать, эгоистичным, и я не удержался от большого соблазна.
Насчет версий, Вы совершенно правы. XP — кстати — 5.10
😉


Dimka Maslov ( 2002-03-28 18:25 ) [6]

>drpass
Как раз нет. XP всё-таки 5.1, а не 5.10.


White ( 2002-03-29 09:44 ) [7]

Доброе утро господа!
Спасибо Вам за подсказку, разобрался, с вашей помощью.
Есть еще один вопрос, может быть кто подскажет, Где найти наиболее полную информацию (литературу), по процедурам и функциям модулей Delphi (Windows, SysUtils, . и т.д.),
и API Windows ?

Читайте также:  File efi microsoft boot bcd windows 10
Оцените статью