- Определение версии Windows
- Информация об ОС в Delphi
- Решение
- Как узнать реальную версию Windows из режима совместимости
- Анализ экспортируемых функций
- Используя WMI
- Ищем в реестре
- Анализ версии kernel32.dll
- Анализируем PEB процесса
- Определение версии и разрядности Windows в Delphi 6 и применение манифеста
- Создание манифеста для программы на Delphi 6 о том что программа поддерживает Windows 10
- Определение версии Windows в Delphi 6
- Функция для Delphi определения является ли Windows 64 битным
- 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, то ключа Вопрос об удобной функции для определения версии Windows остается открытым. [000278] Материалы, которые находятся на этой страничке, любезно предоставлены Игорем Ивановым Информация об ОС в DelphiЗдравствуйте! Если сложно всех ОС дайте инфу хотя-бы по Windows! Ну чтобы определяло только какая Windows стоит. Информация о Win на Delphi Расчет стипендии в Delphi 7 информация считываеться с БД Delphi post и GET запросы, базовая информация Delphi и клиент-сервер. вся информация внутри РешениеЧитаем все из реестра: Заносим данные в файл(можно вывести на экран, занести в переменную и т.д): Добавлено через 16 минут Если не все, то как посмотреть что еще о системе можно вытащить с реестра? Добавлено через 1 минуту Добавлено через 1 час 51 минуту Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь. Как узнать реальную версию Windows из режима совместимостиДумаю каждый хотя бы раз сталкивался с ситуацией, когда на современной ОС не удавалось запустить старую программу, и помогал в этом случае режим совместимости Windows. В основе работы данного механизма лежит перехват различных функций и эмуляция их поведения, свойственного указанной версии Windows, например, эмулируются ключи реестра, каталоги с документами и прочее. Все это нужно для того, чтобы программа думала, что запущена в выбранной среде. Если приложение запущено в режиме совместимости, то вызов GetVersionEx вернет фиктивную версию Windows, что, вероятно, не подойдет для системных программ типа твикеров ОС. Как быть в этом случае? Анализ экспортируемых функцийНа просторах сети наткнулся на способ детектирования по наличию/отсутствию экспортируемых функций у системных библиотек. Пример кода: Решение интересное, но не считаю его приемлемым, так как с выходом каждой версии Windows требуется нетривиальная поддержка. Используя WMI
Из WMI можно получить и версию Windows. Из документации следует что это можно сделать таким запросом: SELECT Version FROM Win32_OperatingSystem Запустив WMI Explorer в режиме совместимости с Windows XP, можно увидеть, что это значение не эмулируется: Метод работает, более того, он полностью документирован, но медленный, и требует тянуть в проект кучу кода по работе с WMI. Ищем в реестреПожалуй самый элегантный и правильный способ найденный в сети — это подсмотреть значение в реестре: К сожалению, проверив его на 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Приветствую Вас, мастера.
Это в том случае, если тебе неохота качать немеренно полезный и незаменимый для каждого программера модуль dim.pas :)))
Или если нужна просто строчка с названием, то можно взять с
>drpass >Dimka Maslov
>drpass
Доброе утро господа! |