Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получение wSuiteMask из GetVersionEx / 9 сообщений из 9, страница 1 из 1
10.08.2018, 02:07
    #39685800
InterSky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
Мне надо получить только wSuiteMask.
Его нет в GetVersion, но есть в GetVersionEx.
Однако чтобы его получить, то ли из-за какой-то ошибки, то ли это только в ранних версиях Delphi, надо делать кучу вещей:
Объявлять тип TOSVersionInfoEx
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
type
  TOSVersionInfoEx = packed record
    dwOSVersionInfoSize: DWORD;
    dwMajorVersion: DWORD;
    dwMinorVersion: DWORD;
    dwBuildNumber: DWORD;
    dwPlatformId: DWORD;
    szCSDVersion: array[0..127] of AnsiChar;
    wServicePackMajor: WORD;
    wServicePackMinor: WORD;
    wSuiteMask: WORD;
    wProductType: Byte;
    wReserved: Byte;
  end;

потому что Delphi5 не знает что такое TOSVersionInfoEx.

Переписывать функцию GetVersionEx
Код: pascal
1.
2.
function GetVersionEx(var lpVersionInformationEx: TOSVERSIONINFOEX): BOOL; stdcall; overload;
  external kernel32 name 'GetVersionExA';

потому что Delphi5 и для GetVersionEx (как и для GetVersion), использует TOSVersionInfo, а вместо несуществующего у него TOSVersionInfoEx.

Вот собственно и вопрос: Может существует простой метод как в одну строчку получить wSuiteMask, чтобы не создавать всю инфраструктуру для работы с TOSVersionInfoEx.

P.S. wSuiteMask мне нужен только для определения что у меня Windows Home Server.
...
Рейтинг: 0 / 0
10.08.2018, 09:04
    #39685850
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
InterSkyМожет существует простой метод
Это он и есть.
...
Рейтинг: 0 / 0
10.08.2018, 09:27
    #39685860
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
InterSky, вы используете механизм (Delphi 5), которому более 20 лет. Поэтому для реализации этой хотелки нужно дописать недостающие структуры руками. Или пользоваться современным механизмом (современной Delphi).
...
Рейтинг: 0 / 0
10.08.2018, 11:33
    #39685951
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
goldmi45Поэтому для реализации этой хотелки нужно дописать недостающие структуры руками

я бы глянул в Jedi Windows API Library и Jedi Code Library

предполагаю, там уже написано

но вот поддерживается ли D5 до сих пор хотя бы в JCL - вопрос.
Впрочем, для объявления типов различия D7 и D5 несущественны
...
Рейтинг: 0 / 0
11.08.2018, 14:47
    #39686400
InterSky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
goldmi45, Разве по вашему это не ошибка что в Delphi5 обе функции и GetVersion, и GetVersionEx передают данные в переменную класса TOSVersionInfo? Просо не досмотрели...
По логике должно:
GetVersion работает с TOSVersionInfo
GetVersion Ex работает с TOSVersionInfo Ex
Иначе какой смысл от GetVersion Ex в Delphi5?
...
Рейтинг: 0 / 0
11.08.2018, 19:56
    #39686437
MinGW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
MSDN
Код: plaintext
1.
2.
3.
BOOL WINAPI GetVersionEx(
  _Inout_ LPOSVERSIONINFO lpVersionInfo
);

Код: plaintext
1.
pVersionInfo [in, out]
      An OSVERSION INFO  or OSVERSIONINFOEX structure that receives the operating system information.
Она принимает и то и то. Ну и как же по-вашему объявлять?

InterSkyGetVersion работает с TOSVersionInfoУ функции GetVersion() нет параметров вообще, она ни с чем не "работает".


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
type
  TOSVersionInfoEx = packed record
    Info: TOSVersionInfo;
    wServicePackMajor: WORD;
    wServicePackMinor: WORD;
    wSuiteMask: WORD;
    wProductType: Byte;
    wReserved: Byte;
  end;

...

var V: TOSVersionInfoEx;
...
FillChar(V, SizeOf(V), 0);
V.Info.dwOSVersionInfoSize:=SizeOf(V);
if GetVersionEx(V.Info) then
    ...
...
...
Рейтинг: 0 / 0
11.08.2018, 22:02
    #39686443
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
InterSkyРазве по вашему это не ошибка что в Delphi5 обе функции и GetVersion, и GetVersionEx передают данные в переменную класса TOSVersionInfo? Просо не досмотрели...
Delphi 5 вышла в 1999 году, тогда не было даже Windows XP, только Windows Server 2000. Скорее всего это была просто заделка "на будущее".
...
Рейтинг: 0 / 0
11.08.2018, 22:04
    #39686444
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
alekcvpтолько Windows Server 2000
тьфу, NT 4.0. 2000я в ранней бете была, наверное :)
...
Рейтинг: 0 / 0
11.08.2018, 23:15
    #39686455
schi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение wSuiteMask из GetVersionEx
Все дело в волшебных пузырьках размере передаваемой структуры, задаваемом в первых 4-х байтах.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получение wSuiteMask из GetVersionEx / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]