Программирование на Delphi - обмен опытом / Версия системы и данные о пользователе

© Зайцев Олег 1998-2004
Лучшая портативная техника. Плееры Камеры Телефоны Компьютеры
Покупателям, пришедшим на www.porta.ru по этой ссылке - дополнительная скидка 1%
Железо | Система | WEB | Компоненты | Графика | Ссылки | Мультимедиа | Сети | Прочее | Реестр | Литература

Статистика

Версия системы и данные о пользователе

Рекомендую:
Главная страница \ Системное программирование \ Версия системы и данные о пользователе

  • Версия системы и данные о пользователе

    Версия системы и данные о пользователе

    Определение типа платформы * * Задать вопрос Наверх
    Как уже говорилось в совете "Определение версии Windows ", функция API GetVersionEx возвращает идентификатор платформы (dwPlatformId) и версию ОС. По ним достаточно легко установить платформу:
    Function GetOSName : string;
    var
     VI  : TOSVersionInfo;
     IsOSNT, IsOSW2K,
     IsOS95, IsOSOSR2,IsOS98  : boolean;
    begin
      FillChar(VI, SizeOf(VI), 0);
      VI.dwOSVersionInfoSize := SizeOf(VI);
      GetVersionEx(VI);
      // Проверка и расшифровка версии и платформы
      IsOS95   := (VI.dwMajorVersion>=4) and (VI.dwMinorVersion=0) and (VI.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS);
      IsOS98   := (VI.dwMajorVersion >= 4) and (VI.dwMinorVersion>0) and (VI.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS);
      IsOSOSR2 := (VI.dwMajorVersion >= 4) and (VI.dwMinorVersion=0) and (lo(VI.dwBuildNumber)>1000) and (VI.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS);
      IsOSW2K  := (VI.dwMajorVersion >= 5) and (VI.dwPlatformId=VER_PLATFORM_WIN32_NT);
      IsOSNT   := (VI.dwPlatformId = VER_PLATFORM_WIN32_NT) and not(IsOSW2K);
      // Формирование названия ОС
      Result:='Неизвестная ОС';
      if IsOS95 then
       Result:='Windows 95';
      if IsOSOSR2 then
       Result:='Windows 95 OSR2';
      if IsOS98 then
       Result:='Windows 98';
      if IsOSW2K then
       Result:='Windows 2000 Build '+inttostr(VI.dwBuildNumber);
      if IsOSNT then
       Result:='Windows NT '+inttostr(VI.dwMajorVersion)+'.'+inttostr(VI.dwMinorVersion);
    end;
    
    При разработке инсталляторов и иных продуктов, которым необходима информация об ОС целесообразно сделать отдельный класс для получения подобной информации. Пример такого класса можно скачать с моего сайта из раздела "Компоненты"

    Определение версии Windows * * Задать вопрос Наверх
    Для определения версии Windows удобно применять API функцию GetVersionEx(); Функция возвращает true при успешном вызове и false при ошибке. При вызове этой функции ей передается единственный параметр типа TOSVersionInfo, представлющий собой record с полями:
    dwOSVersionInfoSize: DWORD; Размер структуры в байтах (должен быть установлен программой перед вызовом)
    dwMajorVersion: DWORD; Версия Windowd - т.н. Major значение (т.е. цифра до точки, нопример в NT 4.0 это будет цифра 4). Для W2k возвращается 5
    dwMinorVersion: DWORD; Версия Windowd - т.н. Minor значение (т.е. цифры после точки)
    dwBuildNumber: DWORD; Номер Build в Windows NT/2k, в W9* это гибрид Build (младший word) и версии (старший Word)
    dwPlatformId: DWORD; Идентификатор платформы. Для него имеется несколько констант VER_PLATFORM_*:
    • VER_PLATFORM_WIN32s - платформа W32s на W3.11
    • VER_PLATFORM_WIN32_WINDOWS - платформа W32 на W95
    • VER_PLATFORM_WIN32_NT - платформа NT (W2k опознается как платформа NT)
    szCSDVersion: array[0..127] of AnsiChar; Строка ASCIIZ, для NT содержит последний сервиспак (например "Service Pack 4", а для 95 содержит дополнительную информацию о системе

    Пример использования:

    var
     VerInfo : TOSVersionInfo;
    begin
      FillChar(VerInfo, SizeOf(VerInfo), 0);
      VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo);
      GetVersionEx(VerInfo);
      Caption := 'OS Ver = ' + inttostr(VerInfo.dwMajorVersion) + '.' +
                 inttostr(VerInfo.dwMinorVersion) +
                 ' Build =' + inttostr(VerInfo.dwBuildNumber)+
                 ' Plattform ID =' + inttostr(VerInfo.dwPlatformId);
    end;
    

    Определение имени, под которым пользователь пошел в систему * * Задать вопрос Наверх
    Имя пользователя, под которым он вошел в систему, достаточно легко определяется при помощи функции API GetUserName:

    BOOL GetUserName(
        LPTSTR lpBuffer, // Буфер для имени пользователя
        LPDWORD nSize    // Размер буфера 
      );	
    
    Таким образом можно написать функцию для определения имени пользователя:
    function GetUserName :string;
    var
      buf : array[0..255] of char;
      size : dword;
    begin
      size := SizeOf(buf);
      GetUserName(buf, size);
      result := buf;
    end;
    

    Определение имени компьютера * * Задать вопрос Наверх
    Имя компьютера определяется при помощи функции API GetComputerName:

    BOOL GetComputerName(
        LPTSTR lpBuffer, // Буфер для имени компьютера
        LPDWORD nSize    // Размер буфера 
      );	
    
    Таким образом можно написать функцию для определения имени компьютера:
    function ComputerName :string;
    var
      buf  : array[0..255] of char;
      size : dword;
    begin
      size := SizeOf(buf);
      if GetComputerName(buf, size) then
       result := buf
        else result := 'Ошибка при определении имени компьютера';
      result := buf;
    end;
    


    © Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA - Хостинг от AGAVA.ru