Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 13:31   #1
100GRamm
ХРЕНЕЮ с ИНДИ
Пользователь
 
Аватар для 100GRamm
 
Регистрация: 08.02.2009
Сообщений: 92
Радость Узнать тип винды

Вопрос и ответы где то встречал, но сейчас чесно прошелся по форуму и не нашел...
Вобщем, нужно узнать из под какой винды запускается мое приложение. Помню, есть вариант чтения из реестра, но тут, предпочтительнее через апи. (за одно тема с важной информацией будет) заранее спасибо!
Велкам! :D http://radiomedtech.ucoz.ru
100GRamm вне форума Ответить с цитированием
Старый 24.01.2011, 13:55   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
var
  /// OS version information
  g_OSVersion: OSVERSIONINFOW;

  /// Are we running unser WOW64?
  g_isWOW64: boolean;

  /// Do host OS supports unicode strings in API?
  g_wideApiSupported: boolean;

{$IFDEF FPC }
type
  OSVERSIONINFOA = OSVERSIONINFO;
{$ENDIF FPC }

// --  --
type
  proc_IsWow64Process = function (hProcess: tHANDLE; out Wow64Process: Windows.BOOL): Windows.BOOL; stdcall;

// --  --
procedure getOSFeatures();
var
  ok: boolean;
  ver: OSVERSIONINFOA;
  isWow64proc: proc_IsWow64Process;
begin
  g_osVersion.dwOSVersionInfoSize := sizeOf(g_osVersion);
  //
  {$IFDEF __AFTER_DB__ } // after Delphi 2007, means we running unicode core
  ok := GetVersionExW(g_osVersion);
  {$ELSE }
    {$IFDEF FPC }
      ok := GetVersionExW(g_osVersion);
    {$ELSE }
      ok := GetVersionExW({work around Borland header translation bug}pOSVersionInfoA(@g_osVersion)^);
    {$ENDIF FPC }
  {$ENDIF __AFTER_DB__ }
  //
  if (not ok) then begin
    //
    // fill ANSI version
    ver.dwOSVersionInfoSize := sizeOf(ver);
    ok := GetVersionExA(ver);
    //
    if (ok) then begin
      //
      with g_osVersion do begin
	//
	dwMajorVersion := ver.dwMajorVersion;
	dwMinorVersion := ver.dwMinorVersion;
	dwBuildNumber  := ver.dwBuildNumber;
	dwPlatformId   := ver.dwPlatformId;
      end;
    end;
  end;
  //
  if (ok) then begin
    //
    case (g_osVersion.dwPlatformId) of

      VER_PLATFORM_WIN32s,
      VER_PLATFORM_WIN32_WINDOWS: begin
	// win 3.1 or win9x/Me, no wide API
	g_wideApiSupported := false;
      end;

      VER_PLATFORM_WIN32_NT:
	g_wideApiSupported := true;

      else begin
	// should not be here, but assume wide anyway
	g_wideApiSupported := true;
      end;

    end;
  end
  else
    // hmm.. no version info, assume ANSI.
    g_wideApiSupported := false;
  //
  g_isWOW64 := false;
  //
  //IsWow64Process is not available on all supported versions of Windows.
  isWow64proc := GetProcAddress(GetModuleHandle(kernel32), 'IsWow64Process');
  if (assigned(isWow64proc)) then
    if (not isWow64proc(GetCurrentProcess(), g_isWOW64)) then
      g_isWOW64 := false;	// isWow64proc fails, probably that means we are not under WOW64
  //
end;
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось veniside; 24.01.2011 в 14:00.
veniside вне форума Ответить с цитированием
Старый 24.01.2011, 19:04   #3
100GRamm
ХРЕНЕЮ с ИНДИ
Пользователь
 
Аватар для 100GRamm
 
Регистрация: 08.02.2009
Сообщений: 92
По умолчанию

Мартин Фаулер был прав.
Велкам! :D http://radiomedtech.ucoz.ru
100GRamm вне форума Ответить с цитированием
Старый 25.01.2011, 04:13   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Это кусок рабочего кода, просто. А так GetVersionEx() и вперёд.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать тип переменной MAcK Паскаль, Turbo Pascal, PascalABC.NET 8 19.12.2012 13:25
две задачи на тип INTEGER и тип CHAR inspiron13 Помощь студентам 5 04.01.2011 00:17
Как узнать тип данных передаваемых sendbuf и send? Crystallon Работа с сетью в Delphi 4 29.07.2010 19:22
как узнать тип файла VAsiliyMvv Общие вопросы Delphi 61 07.07.2010 10:27
Как узнать тип (класс) OLE Automation объекта? Stilet Win Api 2 02.07.2010 09:07