Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> версия WIN, Нужна срочная помощь 
:(
    Опции темы
Штабс
Дата 1.2.2005, 11:09 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Hi Pipl

Нужна срочная помощь
необходимо разобрать платформу

2000
2000 Server
ХР
2003
2003 Server

по возможности с паками....

понимаю что оч много прошу...но за сегодня это для меня многовато
  Вверх
Snowy
Дата 1.2.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Код

function GetWindowsVersion:string;
var
 osv : OSVersionInfo;
Begin
osv.dwOSVersionInfoSize:=sizeOf(osv); GetVersionEx(osv);
result:=format('%d.%d',[osv.dwMajorVersion, osv.dwMinorVersion])+'.'+intToStr(LoWord(osv.dwBuildNumber));
end;

Добавлено @ 11:21
WinXP - это 5.1.2600
Win2003 Server - 5.2.3790 (а бывает 20003 не сервер?)
Win2000 Server - 5.0.xxxx (напр 2195) зависит от сервиспаков.
PM MAIL   Вверх
Штабс
Дата 1.2.2005, 11:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Snowy
блин с меня встреча с пивом
smile)
не напрягайся не нравиться не будет
// я ее начал уже кодить но засомневался...уж больон просто

последний штрих

существует до хрена паков
они не испортят мне малину?
  Вверх
Girder
Дата 1.2.2005, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



1.
Код

procedure TForm1.Button1Click(Sender: TObject);
var i:_osversioninfoa;
begin
i.dwOSVersionInfoSize:=SizeOf(i);
GetVersionEx(i);
//... разбор палетов
Caption:=i.szCSDVersion;
end;


2. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates - обнавления

3.До кучи:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Snowy
Дата 1.2.2005, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Основное различие:
Win2000 - 5.0
Win XP - 5.1
Win 2003 - 5.2
Далее различие в билдах.
Если нужно различать сервер-несервер, то проведи исследование по машинам.
В коммандной строке комманда ver скажет версию и билд.
Посмотри какие бывают билды, сделай выводы.
У меня под рукой тока 2 машины с XP, 2 с 2k3 и одна с 2k.
Свои билды написал выше. Смотри у себя...
PM MAIL   Вверх
Штабс
Дата 1.2.2005, 11:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











чисто теоретически
Windows 2000 Servis Pack 4 (SP4)
Windows XP Servis Pack 1 (SP1)
будет работать не коректно

  Вверх
Girder
Дата 1.2.2005, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Штабс всю информацию можеш найти здесь:
GetVersionEx
_OSVERSIONINFO
_OSVERSIONINFOEX
Пример

PS:
Цитата
так вот это может и помешать

Что помешать? smile Не понял smile Объясни ущербному smile Что ты хочеш?

Это сообщение отредактировал(а) Girder - 1.2.2005, 12:26


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Штабс
Дата 1.2.2005, 12:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











увж. Girder
именно это у меня сейчас и открыто

Windows 2000 Servis Pack 4 (SP4)
Windows XP Servis Pack 1 (SP1)

это тоже от туда см. мою борьбу с ошибкой 1783

паки есть
но за плату и кому то от фирмы

так вот это может и помешать
  Вверх
Snowy
Дата 1.2.2005, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Да, более, чем подробно :-) Только линки микрософт не пропускает. Но поиском найти можно.
PM MAIL   Вверх
Snowy
Дата 1.2.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Вот набросал такую штучку. Это по хэлпу дельфи и ее структурам. Сейчас доработаю по SDK.
Код

function GetWindowsName:string;
var
 osv : OSVersionInfo;
 l: string;
Begin
osv.dwOSVersionInfoSize:=sizeOf(osv); GetVersionEx(osv);
case osv.dwMajorVersion of
  4: case osv.dwMinorVersion of
        0: case osv.dwPlatformId of
             VER_PLATFORM_WIN32_NT: l:='NT 4.0';
             else l:='95';
           end;
       10: l:='98';
       90: l:='Me';
       else l:='9x';
     end;
  5: case osv.dwMinorVersion of
       0: l:='2000';
       1: l:='XP';
       2: l:='2003';
       else l:='NT 5.'+IntToStr(osv.dwMinorVersion);
     end;
  else l:='NT '+IntToStr(osv.dwMajorVersion)+'.'+IntToStr(osv.dwMinorVersion);
end;
l:='Windows '+l+' '+string(osv.szCSDVersion);
result:=l;
end;

PM MAIL   Вверх
Snowy
Дата 1.2.2005, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Вот написал определение имени виндов по SDK. Пришлось, правда, переопределить структуру TOSVersionInfo и заново импортировать GetVersionEx. Так что теперь можно не подключать модуль Windows smile
Хотел запихнуть все в одну функцию, но передумал из-за импорта. Пришлось бы мудрить с указателями, если тип описывать внутри функции.
Код

type TOSVersionInfo=packed record
 dwOSVersionInfoSize: dword;
 dwMajorVersion: dword;
 dwMinorVersion: dword;
 dwBuildNumber:  dword;
 dwPlatformId: dword;
 szCSDVersion: array[0..127] of char;
 wServicePackMajor: word;
 wServicePackMinor: word;
 wSuiteMask:        word;
 wProductType:      byte;
 wReserved:         byte;
end;

function GetVersionEx(var lpVersionInformation: TOSVersionInfo): BOOL; stdcall; external kernel32 name 'GetVersionExA';

function GetWindowsName:string;
var
 osv : TOSVersionInfo;
 l: string;
Begin
osv.dwOSVersionInfoSize:=sizeOf(osv); GetVersionEx(osv);
case osv.dwMajorVersion of
  4: case osv.dwMinorVersion of
        0: case osv.dwPlatformId of
             VER_PLATFORM_WIN32_NT: l:='NT 4.0';
             else l:='95';
           end;
       10: l:='98';
       90: l:='Me';
       else l:='9x';
     end;
  5: case osv.dwMinorVersion of
       0: if osv.wSuiteMask=2 then l:='2000 Advanced Server'
          else if osv.wProductType>1 then l:='2000 Server'
          else l:='2000';
       1: case  osv.wSuiteMask of
            $40:  l:='XP Embedded';
            $200: l:='XP Home';
            else  l:='XP Professional';
          end;
       2: begin
            l:='2003';
            if osv.wProductType>1 then l:='2003 Server';
            case osv.wSuiteMask of
              $400: l:=l+', Web Edition';
              $80:  l:=l+', Datacenter Edition';
              $2:   l:=l+', Enterprise Edition';
            end;
          end;
       else l:='NT 5.'+IntToStr(osv.dwMinorVersion);
     end;
  else l:='NT '+IntToStr(osv.dwMajorVersion)+'.'+IntToStr(osv.dwMinorVersion);
end;
l:='Windows '+l+' '+string(osv.szCSDVersion);
result:=l;
end;

PM MAIL   Вверх
Snowy
Дата 1.2.2005, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Да, забыл. Первый пример выдает имя операционки с сервис паком.
Второй пример кроме этого, различает сервер-несервер и вариант операционки (типа Home/Professional).
PM MAIL   Вверх
Snowy
Дата 1.2.2005, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Что-то я развел кипучую деятельность по простому вопросу smile
Вот готовый код для получения полного наименования операционки.
Оформил в виде отдельного юнита с одной функцией.
Код

unit WinName;

interface

function GetWindowsName:string; //Возвращает полное название Windows

implementation

type

 DWORD = Longword;

 TOSVersionInfo=packed record
   dwOSVersionInfoSize: dword;
   dwMajorVersion: dword;
   dwMinorVersion: dword;
   dwBuildNumber:  dword;
   dwPlatformId: dword;
   szCSDVersion: array[0..127] of char;
   wServicePackMajor: word;
   wServicePackMinor: word;
   wSuiteMask:        word;
   wProductType:      byte;
   wReserved:         byte;
 end;

const VER_PLATFORM_WIN32_NT = 2;

function IntToStr(i:integer):string;
begin str(i,result); end;

function GetVersionEx(var lpVersionInformation: TOSVersionInfo): boolean; stdcall; external 'kernel32.dll' name 'GetVersionExA';

function GetWindowsName:string;
var
 osv : TOSVersionInfo;
 l: string;
Begin
osv.dwOSVersionInfoSize:=sizeOf(osv); GetVersionEx(osv);
case osv.dwMajorVersion of
  4: case osv.dwMinorVersion of
        0: case osv.dwPlatformId of
             VER_PLATFORM_WIN32_NT: l:='NT 4.0';
             else l:='95';
           end;
       10: l:='98';
       90: l:='Me';
       else l:='9x';
     end;
  5: case osv.dwMinorVersion of
       0: if osv.wSuiteMask=2 then l:='2000 Advanced Server'
          else if osv.wProductType>1 then l:='2000 Server'
          else l:='2000';
       1: case  osv.wSuiteMask of
            $40:  l:='XP Embedded';
            $200: l:='XP Home';
            else  l:='XP Professional';
          end;
       2: begin
            l:='2003';
            if osv.wProductType>1 then l:='2003 Server';
            case osv.wSuiteMask of
              $400: l:=l+', Web Edition';
              $80:  l:=l+', Datacenter Edition';
              $2:   l:=l+', Enterprise Edition';
            end;
          end;
       else l:='NT 5.'+IntToStr(osv.dwMinorVersion);
     end;
  else l:='NT '+IntToStr(osv.dwMajorVersion)+'.'+IntToStr(osv.dwMinorVersion);
end;
l:='Windows '+l+' '+string(osv.szCSDVersion);
result:=l;
end;

end.

Раздела uses нет, поскольку все равно пришлось переопределять работу с GetVersionEx.
Пример работы (хотя он и нафиг не нужен):
Код

program WindowsName;
{$APPTYPE CONSOLE}
uses WinName in 'WinName.pas';

begin
 WriteLn(GetWindowsName);
end.

откомпиленая функция весит 2.5кб. Можно включить в коллекцию, если ни у кого замечаний нет.
PM MAIL   Вверх
Штабс
Дата 1.2.2005, 15:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Snowy
Это перебор
право

прошу остановитесь
а то так разучимся думать и искать

с учетом вашего переделываю свой проект...
пока вроде ОК
к завтраму скажу точнее...для отловки жуков нужно время...думаю ночи хватит
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0779 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.