| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Какую OS юзает пользователь? |
| Автор: navodri 11.1.2010, 13:48 |
| Как определить, что пользователь юзает Windows 7? |
| Автор: Демо 11.1.2010, 14:09 |
| Функция GetVersionEx - http://msdn.microsoft.com/en-us/library/ms724451(VS.85).aspx |
| Автор: navodri 11.1.2010, 14:14 |
| Ну, и где там речь о Windows 7 (или хотя бы о Viste) ? И, кстати, значок |
| Автор: artsb 11.1.2010, 15:19 | ||
надеюсь здесь переведёт кто-нибудь Замечание: если вы пишете в Delphi7 (или младше) под Win7 (Vista), то вы наверняка запускаете среду в режиме совместимости с WinXP. В этом случае, код, который выше, не изменит Caption формы на "TRUE", т.к. определится WinXP. Но если запустить приложение не из под среды - всё ОК. Будьте внимательны. |
| Автор: profesiachuvak 12.1.2010, 15:36 | ||
Я так понимаю, что сама среда delphi7 работает только в режиме совместимости? А какая версия будет работать под Win7 без этого режима? з.ы. И как же определить тогда что мы работаем в Win7 обойдя этот режим совместимости? |
| Автор: artsb 12.1.2010, 15:48 | ||
ИМХО с 2006. Хотя может и позднее. Точно не знаю
Получается никак. Только запускать не из под среды если. |
| Автор: Демо 12.1.2010, 17:08 |
| хм. У меня D6 в обычном режиме работает. А почему он должен в режиме совместимости работать? |
| Автор: CodeMonkey 12.1.2010, 18:18 |
А в кнопочке About что пишет? Добавлено через 1 минуту и 53 секунды Типа, неполная совместимость, поэтому может форсированно запускаться в режиме совместимости с XP SP2. Хз, применимо ли к Delphi 6. |
| Автор: artsb 12.1.2010, 18:31 |
Я не писал, что он должен. Я говорю, что такое возможно. Кстати, мне кажется, что даже если вы насильно не задавали режим совместимости, система всё равно запускает среду в режиме совместимости. Проверьте: возьмите код выше, засуньте его в обработчик нажатия кнопки, запустите приложение из под среды и нажмите кнопку. Если в Caption появится TRUE, значит всё ОК. Лично у меня, при запуске из под BCB 6 Caption не изменяется. А вот при запуске из под 2010 всё ОК. Добавлено через 1 минуту и 49 секунд У меня пишет WinXP |
| Автор: navodri 12.1.2010, 18:35 | ||
Я понял. Ребята, а есть что-то проще? Ну, типа Windows Vista или Windows 7? Мне НЕ надо определять версию (вроде 6.1 build...) и т.п. А просто, под какой мы операционкой? Ну, помните, как в старые добрые времена типа:
|
| Автор: artsb 12.1.2010, 18:44 |
| navodri, читайте MSDN. Я привёл код как определить под Win7 мы или нет. Добавлено через 11 минут и 49 секунд Тут и так всё просто. Всего-то 5 строк |
| Автор: artsb 12.1.2010, 19:42 | ||
Вот вам на Делфи:
|
| Автор: bems 12.1.2010, 19:53 |
А манифест разве не решает проблему? Это старые гланды через добрую задницу. Правильный способ тебе дали выше. |
| Автор: CodeMonkey 12.1.2010, 20:10 | ||
Ребят, зачем нам API? Мы в Delphi работаем, у нас оболочки есть. Например, такие:
Добавлено через 1 минуту и 7 секунд Я думаю, что должон решать. Только его ведь может и не быть. А если он есть, то должен быть от Висты/7-ки. XP-вый не подойдёт. |
| Автор: bems 12.1.2010, 20:15 |
| Ну добавить же не проблема ведь. Нет? |
| Автор: CodeMonkey 12.1.2010, 20:52 |
Ну, обычно нет. Но мало ли. Вдруг нам как раз нужны эти хаки совместимости, потому что у нас куча кривого кода. |
| Автор: bems 12.1.2010, 21:20 |
| И заодно мы хотим знать настоящую версию винды, потому что хаки не действуют в достаточной степени для того, чтобы можно было игнорировать её... Ну нельзя исключать этот случай, хотя очевидно же, что кошмар. Да уж... |
| Автор: Демо 12.1.2010, 21:39 |
У меня в D6 в About пишет Windows 2000 (Build 7600) (У меня Windows Seven x64) Но это не значит, что он в режиме совместимости работает. Просто на время выпуска Delphi понятия Windows 7 ещё не было. |
| Автор: artsb 12.1.2010, 21:48 | ||
А причём тут манифест? Я говорю, что если запускать прогу из под среды (F9), то результат работы кода неверен. Если же запустить прогу просто из под винды - всё ОК. Или я вас неправильно понял? Эм... Что это за функция такая? Ни ВСВ 6, ни Делфи 2010 её не знают. Но поиск в гугле показал, что такая должна быть в Делфи 6. И первые же строки в гугле "говорят" о том, что она работает неправильно
Кстати, даже в них, наверное, не обошлось без WinAPI. Надо бы исходник глянуть, но у меня нет Делфи 6. |
| Автор: Демо 12.1.2010, 21:49 | ||||
PS. Уменя показывает
Добавлено @ 21:50 Конечно не обошлось.
|
| Автор: artsb 12.1.2010, 22:01 | ||||||
CodeMonkey, кстати, эта проверка не даёт точного результата (о котором просил ТС):
В http://msdn.microsoft.com/en-us/library/ms724833%28VS.85%29.aspx написано, что для Win7 должно ещё выполняться условие:
, а для Windows Server 2008 R2
|
| Автор: CodeMonkey 13.1.2010, 00:10 | ||
При том, что в режиме совместимости могут быть запущены только "старые" программы. Программа с вистовским манифестом (очевидно) старой не является. Угу. Конечно. http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/SysUtils_CheckWin32Version.html. Начиная с Delphi 6. Только в Delphi 6. Несомненно, они работают http://transl-gunsmoker.blogspot.com/2009/10/windows-nt.html. Автор вопроса не просил точной проверки:
Как я понимаю вопрос, автор выбирает ветку выполнения в зависимости от "уровня" операционки. Типа, можно ли использовать определённые флаги или функции. А Win7 в этом плане не отличается от Win2008 R2. По-моему, я чётко написал: "Win7 or Win2008 R2 or above", ага? Согласен, не значит. И судя по About, там похоже на Win7. Build 7600 - это от Win7. Просто помощник по совместимости программ запускается автоматически, обнаруживая старую программу с проблемой совместимости. А при запуске старых Дельфей, диалог помощника точно всплывает. Так что пока непонятно, надо бы эксперимент провести. Мне 7-ку/6-ку ставить лениво |
| Автор: artsb 13.1.2010, 09:45 | ||
| CodeMonkey, ТС писал: Поэтому я и написал именно для определения Win7. Вдруг его код не должен работать под Win2008 R2 И оставим эту тему уже
Ясно. Спс. |
| Автор: navodri 29.1.2010, 14:57 | ||
Ребята! Всем спасибо. Простите, что багодарность с запозданием... Вот код без лишних наворотов, который отлично работает. Проверено!
|
| Автор: CodeMonkey 29.1.2010, 15:48 | ||
| 1. Если у вас Delphi 7 или выше, то реализацию CheckWin32Version можете выкинуть - она и так есть. 2. Непонятны первые две строчки в Button1Click. Есть мнение, что вам надо так:
3. Надеюсь вы уловили, что мы тут говорили про Windows Vista = Windows Server 2008, да? Добавлено через 5 минут и 9 секунд http://17slon.com/blogs/gabr/2007/02/four-ways-to-detect-vista.html (как видим - нет прямого пути, только обходные; выглядит логичным). |