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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какую OS юзает пользователь? Как определить Windows 7... 
:(
    Опции темы
bems
Дата 12.1.2010, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(CodeMonkey @  12.1.2010,  20:10 Найти цитируемый пост)
Только его ведь может и не быть.
Ну добавить же не проблема ведь. Нет?



--------------------
Обижено школьников: 8
PM MAIL   Вверх
CodeMonkey
Дата 12.1.2010, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(bems @  12.1.2010,  20:15 Найти цитируемый пост)
Ну добавить же не проблема ведь. Нет?

Ну, обычно нет. Но мало ли. Вдруг нам как раз нужны эти хаки совместимости, потому что у нас куча кривого кода.


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
bems
Дата 12.1.2010, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



И заодно мы хотим знать настоящую версию винды, потому что хаки не действуют в достаточной степени для того, чтобы можно было игнорировать её...

Ну нельзя исключать этот случай, хотя очевидно же, что кошмар. Да уж...


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Демо
Дата 12.1.2010, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 7
Всего: 50



Цитата(CodeMonkey @  12.1.2010,  18:18 Найти цитируемый пост)
А в кнопочке About что пишет?


У меня в D6 в About пишет 
Windows 2000 (Build 7600)  (У меня Windows Seven x64)

Но это не значит, что он в режиме совместимости работает.
Просто на время выпуска Delphi понятия Windows 7 ещё не было.


--------------------
    
PM MAIL ICQ Skype   Вверх
artsb
Дата 12.1.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



Цитата(bems @  12.1.2010,  19:53 Найти цитируемый пост)
А манифест разве не решает проблему?

А причём тут манифест? Я говорю, что если запускать прогу из под среды (F9), то результат работы кода неверен. Если же запустить прогу просто из под винды - всё ОК. Или я вас неправильно понял?

Цитата(CodeMonkey @  12.1.2010,  20:10 Найти цитируемый пост)
CheckWin32Version

Эм... Что это за функция такая? Ни ВСВ 6, ни Делфи 2010 её не знают. Но поиск в гугле показал, что такая должна быть в Делфи 6. И первые же строки в гугле "говорят" о том, что она работает неправильно  smile 

Цитата(CodeMonkey @  12.1.2010,  20:10 Найти цитируемый пост)
Ребят, зачем нам API? Мы в Delphi работаем, у нас оболочки есть. Например, такие:

Кстати, даже в них, наверное, не обошлось без WinAPI. Надо бы исходник глянуть, но у меня нет Делфи 6.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Демо
Дата 12.1.2010, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 7
Всего: 50



PS. Уменя показывает     
Код

Caption := 'Win7 or Win2008 R2 or above';


Добавлено @ 21:50
Цитата(artsb @  12.1.2010,  21:48 Найти цитируемый пост)
Кстати, даже в них, наверное, не обошлось без WinAPI


Конечно не обошлось.

Код

{$IFDEF MSWINDOWS}
procedure InitPlatformId;
var
  OSVersionInfo: TOSVersionInfo;
begin
  OSVersionInfo.dwOSVersionInfoSize := SizeOf(OSVersionInfo);
  if GetVersionEx(OSVersionInfo) then
    with OSVersionInfo do
    begin
      Win32Platform := dwPlatformId;
      Win32MajorVersion := dwMajorVersion;
      Win32MinorVersion := dwMinorVersion;
      Win32BuildNumber := dwBuildNumber;
      Win32CSDVersion := szCSDVersion;
    end;
end;

function CheckWin32Version(AMajor: Integer; AMinor: Integer = 0): Boolean;
begin
  Result := (AMajor > Win32MajorVersion) or
            ((AMajor = Win32MajorVersion) and
             (AMinor >= Win32MinorVersion));
end;



Это сообщение отредактировал(а) Демо - 12.1.2010, 21:51


--------------------
    
PM MAIL ICQ Skype   Вверх
artsb
Дата 12.1.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



CodeMonkey, кстати, эта проверка не даёт точного результата (о котором просил ТС):
Код

CheckWin32Version(6, 1)

В МСДН написано, что для Win7 должно ещё выполняться условие:
Код

OSVERSIONINFOEX.wProductType = VER_NT_WORKSTATION

, а для Windows Server 2008 R2
Код

OSVERSIONINFOEX.wProductType <> VER_NT_WORKSTATION


Это сообщение отредактировал(а) artsb - 12.1.2010, 22:01


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
CodeMonkey
Дата 13.1.2010, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



Цитата(artsb @  12.1.2010,  21:48 Найти цитируемый пост)
А причём тут манифест?

При том, что в режиме совместимости могут быть запущены только "старые" программы. Программа с вистовским манифестом (очевидно) старой не является.

Цитата(artsb @  12.1.2010,  21:48 Найти цитируемый пост)
Ни ВСВ 6, ни Делфи 2010 её не знают.

Угу. Конечно. SysUtils.CheckWin32Version. Начиная с Delphi 6.

Цитата(artsb @  12.1.2010,  21:48 Найти цитируемый пост)
она работает неправильно

Только в Delphi 6.

Цитата(artsb @  12.1.2010,  21:48 Найти цитируемый пост)
даже в них, наверное, не обошлось без WinAPI

Несомненно, они работают вот так.

Цитата(artsb @  12.1.2010,  22:01 Найти цитируемый пост)
эта проверка не даёт точного результата (о котором просил ТС)

Автор вопроса не просил точной проверки:
Цитата(navodri @  12.1.2010,  18:35 Найти цитируемый пост)
Мне НЕ надо определять версию (вроде 6.1 build...) и т.п. А просто, под какой мы операционкой?


Как я понимаю вопрос, автор выбирает ветку выполнения в зависимости от "уровня" операционки. Типа, можно ли использовать определённые флаги или функции. А Win7 в этом плане не отличается от Win2008 R2.

Цитата(artsb @  12.1.2010,  22:01 Найти цитируемый пост)
В МСДН написано, что для Win7 должно ещё выполняться условие

По-моему, я чётко написал: "Win7 or Win2008 R2 or above", ага?

Цитата(Демо @  12.1.2010,  21:39 Найти цитируемый пост)
Но это не значит, что он в режиме совместимости работает.

Согласен, не значит. И судя по About, там похоже на Win7. Build 7600 - это от Win7.
Просто помощник по совместимости программ запускается автоматически, обнаруживая старую программу с проблемой совместимости. А при запуске старых Дельфей, диалог помощника точно всплывает. Так что пока непонятно, надо бы эксперимент провести. Мне 7-ку/6-ку ставить лениво smile


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
artsb
Дата 13.1.2010, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 1
Всего: 64



CodeMonkey, ТС писал:
Цитата(navodri @  11.1.2010,  13:48 Найти цитируемый пост)
Как определить, что пользователь юзает Windows 7?

Поэтому я и написал именно для определения Win7. Вдруг его код не должен работать под Win2008 R2  smile 
И оставим эту тему уже smile  . ТС сам выберет, что ему нужно.

Цитата(CodeMonkey @  13.1.2010,  00:10 Найти цитируемый пост)
При том, что в режиме совместимости могут быть запущены только "старые" программы. Программа с вистовским манифестом (очевидно) старой не является.

Ясно. Спс.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
navodri
Дата 29.1.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: -1



Ребята! Всем спасибо. Простите, что багодарность с запозданием... Вот код без лишних наворотов, который отлично работает. Проверено!

Код

function CheckWin32Version(AMajor: Integer; AMinor: Integer): Boolean;
begin
  Result := (Win32MajorVersion > AMajor) or
            ((Win32MajorVersion = AMajor) and
             (Win32MinorVersion >= AMinor));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if (Win32MajorVersion > 4) or ((Win32MajorVersion = 4) and (Win32MinorVersion > 0)) then caption := 'Windows 98';
  if (Win32MajorVersion > 4) and (Win32Platform = VER_PLATFORM_WIN32_NT) then caption := 'Windows 2K';
  if CheckWin32Version(5, 1) then caption := 'Windows XP';
  if CheckWin32Version(6, 0) then caption := 'Windows Vista';
  if CheckWin32Version(6, 1) then caption := 'Windows 7';
end;

PM MAIL WWW   Вверх
CodeMonkey
Дата 29.1.2010, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1839
Регистрация: 24.6.2008
Где: Россия, Тверь

Репутация: 29
Всего: 89



1. Если у вас Delphi 7 или выше, то реализацию CheckWin32Version можете выкинуть - она и так есть.
2. Непонятны первые две строчки в Button1Click. Есть мнение, что вам надо так:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
  if CheckWin32Version(4, 0) then Caption := 'Windows 95';
  if CheckWin32Version(4, 1) then Caption := 'Windows 98';
  if CheckWin32Version(5, 0) then Caption := 'Windows 2K';
  if CheckWin32Version(5, 1) then Caption := 'Windows XP';
  if CheckWin32Version(6, 0) then Caption := 'Windows Vista';
  if CheckWin32Version(6, 1) then Caption := 'Windows 7';
end;

3. Надеюсь вы уловили, что мы тут говорили про Windows Vista = Windows Server 2008, да? smile

Добавлено через 5 минут и 9 секунд
Как определить настоящую версию Windows в приложении, запущенном в режиме совместимости (как видим - нет прямого пути, только обходные; выглядит логичным).


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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