Что нового

@OSVersion новые версии OS Microsoft Windows

Статус
Закрыто для дальнейших ответов.

SharkyEXE

Новичок
Сообщения
134
Репутация
0
Версия AutoIt: 3.3.12.0

Описание:
Здравствуйте.

Прошу прощения, что я, возможно, пишу не сюда.

1) Согласно этой ссылке существуют нижеследующие версии ОС Microsoft Windows
Operating system -> Version number
01) Windows 8.1 -> 6.3
02) Windows Server 2012 R2 -> 6.3
03) Windows 8 -> 6.2
04) Windows Server 2012 -> 6.2
05) Windows 7 -> 6.1
06) Windows Server 2008 R2 -> 6.1
07) Windows Server 2008 -> 6.0
08) Windows Vista -> 6.0
09) Windows Server 2003 R2 -> 5.2
10) Windows Server 2003 -> 5.2
11) Windows XP 64-Bit Edition -> 5.2
12) Windows XP -> 5.1
13) Windows 2000 -> 5.0

2) Согласно этой ссылке для макроса
Код:
@OSVersion

существуют нижеследующие версии ОС Microsoft Windows
@OSVersion -> Возвращает одно из следующих значений:
01) "WIN_2008R2"
02) "WIN_7"
03) "WIN_8"
04) "WIN_2008"
05) "WIN_VISTA"
06) "WIN_2003"
07) "WIN_XP"
08) "WIN_XPe"
09) "WIN_2000"

3) Не претендую на точность, но по моему мнению получается так:
Operating system -> Макрос @OSVersion возвращает значение
01) Windows 8.1 -> ?!
02) Windows Server 2012 R2 -> ?!
03) Windows 8 -> "WIN_8"
04) Windows Server 2012 -> ?!
05) Windows 7 -> "WIN_7"
06) Windows Server 2008 R2 -> "WIN_2008R2"
07) Windows Server 2008 -> "WIN_2008"
08) Windows Vista -> "WIN_VISTA"
09) Windows Server 2003 R2 -> ?!
10) Windows Server 2003 -> "WIN_2003"
11) Windows XP 64-Bit Edition -> ?!
12) Windows XP -> "WIN_XP"
13) Windows 2000 -> "WIN_2000"


Вопросы:
1) макрос @OSVersion возвращает или нет значения для:
1-1) Windows 8.1
1-2) Windows Server 2012 R2
1-3) Windows Server 2012
1-4) Windows Server 2003 R2
1-5) Windows XP 64-Bit Edition

2) если макрос @OSVersion возвращает значения для:
2-1) Windows 8.1
2-2) Windows Server 2012 R2
2-3) Windows Server 2012
2-4) Windows Server 2003 R2
2-5) Windows XP 64-Bit Edition
то

3) какие значения макрос @OSVersion возвращает для:
3-1) Windows 8.1
3-2) Windows Server 2012 R2
3-3) Windows Server 2012
3-4) Windows Server 2003 R2
3-5) Windows XP 64-Bit Edition

Спасибо.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SharkyEXE,
Откройте справку v3.3.12.0 и посмотрите, что возвращает макрос @OSVersion. Разрядность системы покажет макрос @OSArch.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Продолжу...
иначе
4) Ошибка
4.1) Ошибка
4.2) Ошибка
4.3) Ошибка
4.4) Ошибка
4.5) Ошибка
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
madmasles
Открыл файл-справку C:\Program Files (x86)\AutoIt3\AutoIt.chm из установленного AutoIt 3.3.12.0

Для макроса @OSVersion написано нижеследующее:
Returns one of the following: "WIN_81", "WIN_8", "WIN_7", "WIN_VISTA", "WIN_XP", "WIN_XPe",
for Windows servers: "WIN_2012R2", "WIN_2012", "WIN_2008R2", "WIN_2008", "WIN_2003"

Таким образом получается, что для Autoit 3.3.12.0 справедливо нижеследующее:

Operating system -> Макрос @OSVersion возвращает значение
01) Windows 8.1 -> "WIN_81"
02) Windows Server 2012 R2 -> "WIN_2012R2"
03) Windows 8 -> "WIN_8"
04) Windows Server 2012 -> "WIN_2012"
05) Windows 7 -> "WIN_7"
06) Windows Server 2008 R2 -> "WIN_2008R2"
07) Windows Server 2008 -> "WIN_2008"
08) Windows Vista -> "WIN_VISTA"
09) Windows Server 2003 R2 -> ?!
10) Windows Server 2003 -> "WIN_2003"
11) Windows XP 64-Bit Edition -> ?!
12) Windows XP -> "WIN_XP"
13) Windows 2000 -> "WIN_2000"

Однако есть пару вопросов:
1) макрос @OSVersion - возвращает или нет, если возвращает, то какое значение для Windows XP 64-Bit Edition?
2) макрос @OSVersion - возвращает или нет, если возвращает, то какое значение для Windows Server 2003 R2?
3) в файле-справке C:\Program Files (x86)\AutoIt3\AutoIt.chm из установленного AutoIt 3.3.12.0 для макроса @OSVersion ничего не написано про "WIN_2000"
Returns one of the following: "WIN_81", "WIN_8", "WIN_7", "WIN_VISTA", "WIN_XP", "WIN_XPe",
for Windows servers: "WIN_2012R2", "WIN_2012", "WIN_2008R2", "WIN_2008", "WIN_2003"
Получается, что макрос @OSVersion из Autoit 3.3.12.0 не возвращает значение "WIN_2000" для Windows 2000?


Добавлено:
Сообщение автоматически объединено:

inververs сказал(а):
Продолжу...
иначе
4) Ошибка
4.1) Ошибка
4.2) Ошибка
4.3) Ошибка
4.4) Ошибка
4.5) Ошибка
Это всё к чему Ваши пункты?

Можно, пожалуйста, поподробнее...
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
SharkyEXE [?]
Получается, что макрос @OSVersion из Autoit 3.3.12.0 не возвращает значение "WIN_2000" для Windows 2000?
Справка -> AutoIt -> Introduction:
v3.3.8.1
Compatible with Windows 2000 / XP / 2003 / Vista / 2008 / 7
v3.3.12.0
Compatible with Windows XP / Server 2003 / Vista / Server 2008 / 7 / 8


Добавлено:
Сообщение автоматически объединено:

Можно еще получить структуру OSVERSIONINFOEX функцией _WinAPI_GetVersionEx() и, на основании ее данных, узнать что за система у Вас.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
madmasles

Исходя из того, что Вы мне написали, получается, что каждая новая версия AutoIt поддерживает меньше ОС, так, чтоли?

А по поводу, напишите мне, пожалуйста, 100%но рабочий вариант:
1) макрос @OSVersion - возвращает или нет, если возвращает, то какое значение для Windows XP 64-Bit Edition?
2) макрос @OSVersion - возвращает или нет, если возвращает, то какое значение для Windows Server 2003 R2?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
SharkyEXE

Что вы не поняли из написанного выше?

@OSVersion - возвращает версию ОС (ниже XP больше не поддерживается, Windows Server 2003 R2 = "WIN_2003")
@OSArch - возвращает разрядность ОС

Вопрос только в том, зачем так тщательно к этому цепляться, если вы пишите программу, которая выводит точную версию и разрядность ОС, то используйте _WinAPI_GetVersionEx(), как советовал madmasles.

SharkyEXE сказал(а):
какое значение для Windows XP 64-Bit Edition?

Код:
(@OSVersion = 'WIN_XP' ) And (@OSArch = 'X64')


P.S

В большинстве случаев нужно просто сделать проверку на минимально допустимую версию ОС, на которой скрипт будет работать, поэтому проще написать так:

Код:
If _WinAPI_GetVersion() < '6.0' Then ; Если текущая версия ОС ниже Windows Vista


или

Код:
If _WinAPI_GetVersion() < '6.1' Then ; Если текущая версия ОС ниже Windows 7


Полный список номеров версий можно посмотреть здесь.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
Yashied, madmasles
Пожалуйста, я Вас очень прошу - если у Вас есть время, возможность, желание - напишите всем тем, кто в новых версиях AutoIt отказывается от поддержки старых ОС - смысл выхода новых версий Autoit в том, чтобы Autoit работал как можно на большем числе ОС.
А так Autoit стремиться деградировать в плане поддержки ОС - такими темпами, если в каждой новой версии Autoit прекращать поддерржку старых версий ОС (выкинуть XP, 2003, Vista, ...) - можно добиться того, что Autoit будет работать только на Windows 8.1

Или я не прав?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
SharkyEXE сказал(а):

Какой смысл осуществлять поддержку того, что уже почти не используется, особенно, если эта поддержка не в лучшую сторону сказывается на самом продукте. Как пример, представьте современный ноутбук со встроенным FDD 3.5 или того хуже FDD 5.25. По той же самой причине в AutoIt 3.3.6.1 (если не ошибаюсь) убрали поддержку ANSI, т.е. полностью перешли на Unicode. Или, например, в Windows Vista убрали поддержку 16-битных программ.

Если нужна поддержка "доисторических" ОС, то используйте более ранние версии AutoIt.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
Yashied сказал(а):
Какой смысл осуществлять поддержку того, что уже почти не используется, особенно, если эта поддержка не в лучшую сторону сказывается на самом продукте. Как пример, представьте современный ноутбук со встроенным FDD 3.5 или того хуже FDD 5.25. По той же самой причине в AutoIt 3.3.6.1 (если не ошибаюсь) убрали поддержку ANSI, т.е. полностью перешли на Unicode. Или, например, в Windows Vista убрали поддержку 16-битных программ.
По крайнем мере, логично было бы делать так, чтобы новые фишки работали только на новых ОС.
Если бы я был разработчиком языка Autoit - поддержка старых ОС остается как есть, без претензий, а все новые функции я бы писал только для новых версий операционных систем.
Например, при добавлении новой функции Вася в новую версию Autoit - функция Вася должна 100%но работать на новых ОС, например все ОС, выше Windows 7
А на старых ОС, ниже Windows 7 - функция Вася не должна работать
Вот и весь вопрос.

Повторюсь, если с каждой новой версии Autoit выкидывать поддержку ОС - то не минуем день, что останется только Windows 8, 8.1, 10

Yashied сказал(а):
Если нужна поддержка "доисторических" ОС, то используйте более ранние версии AutoIt.
Возможно, может быть, когда-то разработчики языка Autoit на этих "доисторических" ОС тестировали язык Autoit
Ничего личного, идея супер, это мне две разные версии компилить - одна версия для старых ОС (с поддержкой 2000), другая версия для новых ОС (все версии, за исключением 2000)? ;)

PS. Насколько мне изместно, cmd/bat команды от Windows 2000 до Windows 8.1 переходят от версии к версии, может даже в каждой новой версии Windows к cmd/bat командам добавляются новые команды
Но чтобы cmd/bat команды от Windows XP, например, не заработали в Windows 8.1 - я не встречал.
Сообщение автоматически объединено:

Всем здравствуйте.

Пожалуйста, напишите пример, а как использовать это решение перейти
Можно еще получить структуру OSVERSIONINFOEX функцией _WinAPI_GetVersionEx() и, на основании ее данных, узнать что за система у Вас.

Спасибо.
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
напишите пример, а как использовать это решение
Код:
#include <WinAPISys.au3>

$tOSVERSIONINFOEX = _WinAPI_GetVersionEx()

If @error Then
    Exit MsgBox(0, 'Failure', '_WinAPI_GetVersionEx error!')
EndIf

;$dwOSVersionInfoSize = DllStructGetData($tOSVERSIONINFOEX, 1)
$dwMajorVersion = DllStructGetData($tOSVERSIONINFOEX, 2)
$dwMinorVersion = DllStructGetData($tOSVERSIONINFOEX, 3)
$dwBuildNumber = DllStructGetData($tOSVERSIONINFOEX, 4)
$dwPlatformId = DllStructGetData($tOSVERSIONINFOEX, 5)
$szCSDVersion = DllStructGetData($tOSVERSIONINFOEX, 6)
$wServicePackMajor = DllStructGetData($tOSVERSIONINFOEX, 7)
$wServicePackMinor = DllStructGetData($tOSVERSIONINFOEX, 8)
$wSuiteMask = DllStructGetData($tOSVERSIONINFOEX, 9)
$wProductType = DllStructGetData($tOSVERSIONINFOEX, 10)
;$wReserved = DllStructGetData($tOSVERSIONINFOEX, 11)

ConsoleWrite('Major Version:            ' & $dwMajorVersion & @CRLF)
ConsoleWrite('Minor Version:            ' & $dwMinorVersion & @CRLF)
ConsoleWrite('Build Number:            ' & $dwBuildNumber & @CRLF)
ConsoleWrite('Platform Id:            ' & $dwPlatformId & @CRLF)
ConsoleWrite('CSD Version (Service Pack):    ' & $szCSDVersion & @CRLF)
ConsoleWrite('Service Pack Major:        ' & $wServicePackMajor & @CRLF)
ConsoleWrite('Service Pack Minor:        ' & $wServicePackMinor & @CRLF)
ConsoleWrite('Suite Mask:            ' & $wSuiteMask & @CRLF)
ConsoleWrite('Product Type:            ' & $wProductType & @CRLF)


Расшифровка значений есть по указанной ссылке.
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
CreatoR

Здравствуйте.

Большое Вам спасибо, очень красиво

А вот такой вопрос - вот здесь есть таблица, в которой указано, например

Operating systemVersion numberdwMajorVersiondwMinorVersionOther
Windows 1010.0*100OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 201610.0*100OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION

А как отделить эти операционные системы?

Как-бы у них одинаковые цифры в столбике 2,3,4, разное, только в столбике 5
OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION ( Windows 10 )
OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION ( Windows 2016 )

Спасибо.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
как отделить эти операционные системы?
В смысле отделить?
Я вообще не понимаю для чего это всё нужно, что нужно определить, какое условие и для чего? Только прошу коротко и лаконично...
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
Здравсвтуйте.

Мне нужно, чтобы при запуске показывалось, что у меня
или Windows 10 (x64 или x86 разрадность)
или Windows Server 2016 (x64 или x86 разрадность)
или Windows 8.1 (x64 или x86 разрадность)
или Windows Server 2012 R2 (x64 или x86 разрадность)
или Windows 8 (x64 или x86 разрадность)
или Windows Server 2012 (x64 или x86 разрадность)
или Windows 7 (x64 или x86 разрадность)
или Windows Server 2008 R2 (x64 или x86 разрадность)
или Windows Server 2008 (x64 или x86 разрадность)
или Windows Vista (x64 или x86 разрадность)
или Windows Server 2003 R2 (x64 или x86 разрадность)
или Windows Home Server (x64 или x86 разрадность)
или Windows Server 2003 (x64 или x86 разрадность)
или Windows XP Professional x64 Edition
или Windows XP (x64 или x86 разрадность)
или Windows 2000 (x64 или x86 разрадность)

( согласно этой таблицы )

Просто я не знаю, как это сделать, пожалуйста, научите меня
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Следуя официальной таблице, вот функция возвращающая строку версии системы:

Код:
#include <WinAPISys.au3>
#include <APIConstants.au3>

MsgBox(64, @ScriptName, 'OS Version: ' & _WinAPI_GetVersionString())

Func _WinAPI_GetVersionString()
    Local $tOSVERSIONINFOEX = _WinAPI_GetVersionEx()
 
    If @error Then
        Return SetError(1, 0, -1) ;_WinAPI_GetVersionEx error!
    EndIf
 
    Local $sRet = '', $bX64 = False
 
    ;Local $dwOSVersionInfoSize = DllStructGetData($tOSVERSIONINFOEX, 1)
    Local $dwMajorVersion = DllStructGetData($tOSVERSIONINFOEX, 2)
    Local $dwMinorVersion = DllStructGetData($tOSVERSIONINFOEX, 3)
    Local $dwBuildNumber = DllStructGetData($tOSVERSIONINFOEX, 4)
    Local $dwPlatformId = DllStructGetData($tOSVERSIONINFOEX, 5)
    Local $szCSDVersion = DllStructGetData($tOSVERSIONINFOEX, 6)
    Local $wServicePackMajor = DllStructGetData($tOSVERSIONINFOEX, 7)
    Local $wServicePackMinor = DllStructGetData($tOSVERSIONINFOEX, 8)
    Local $wSuiteMask = DllStructGetData($tOSVERSIONINFOEX, 9)
    Local $wProductType = DllStructGetData($tOSVERSIONINFOEX, 10)
    ;Local $wReserved = DllStructGetData($tOSVERSIONINFOEX, 11)
 
    Switch $dwMajorVersion + Number('0.' & $dwMinorVersion)
        Case 10
            If $wProductType = $VER_NT_WORKSTATION Then
                $sRet = 'Windows 10'
            Else
                $sRet = 'Windows Server 2016'
            EndIf
        Case 6.3
            If $wProductType = $VER_NT_WORKSTATION Then
                $sRet = 'Windows 8.1'
            Else
                $sRet = 'Windows Server 2012 R2'
            EndIf
        Case 6.2
            If $wProductType = $VER_NT_WORKSTATION Then
                $sRet = 'Windows 8'
            Else
                $sRet = 'Windows Server 2012'
            EndIf
        Case 6.1
            If $wProductType = $VER_NT_WORKSTATION Then
                $sRet = 'Windows 7'
            Else
                $sRet = 'Windows Server 2008 R2'
            EndIf
        Case 6
            If $wProductType = $VER_NT_WORKSTATION Then
                $sRet = 'Windows Vista'
            Else
                $sRet = 'Windows Server 2008'
            EndIf
        Case 5.2
            If _WinAPI_GetSystemMetrics($SM_SERVERR2) <> 0 Then
                $sRet = 'Windows Server 2003 R2'
            ElseIf BitAND($wSuiteMask, $VER_SUITE_WH_SERVER) Then
                $sRet = 'Windows Home Server'
            ElseIf _WinAPI_GetSystemMetrics($SM_SERVERR2) = 0 Then
                $sRet = 'Windows Server 2003'
            ElseIf ($wProductType = $VER_NT_WORKSTATION) And (@OSArch = 'X64') Then
                $sRet = 'Windows XP Professional x64 Edition'
                $bX64 = True
            Else
                If _WinAPI_GetSystemMetrics($SM_MEDIACENTER) <> 0 Then
                    $sRet = 'Windows XP Media Center Edition'
                ElseIf _WinAPI_GetSystemMetrics($SM_STARTER) <> 0 Then
                    $sRet = 'Windows XP Starter Edition'
                ElseIf _WinAPI_GetSystemMetrics($SM_TABLETPC) <> 0 Then
                    $sRet = 'Windows XP Tablet PC Edition'
                EndIf
            EndIf
        Case 5.1
            $sRet = 'Windows XP'
        Case 5
            $sRet = 'Windows 2000'
    EndSwitch
 
    If $sRet = '' Then
        Return 'Unsupported Windows version'
    EndIf
 
    If $szCSDVersion Then
        $sRet &= ', ' & $szCSDVersion & ' ' & $wServicePackMajor
    EndIf
 
    If Not $bX64 Then
        $sRet &= ' (' & @OSArch & ')'
    EndIf
 
    Return $sRet
EndFunc


Тестировалось только под Windows 10.
 
Последнее редактирование:
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
CreatoR

Здравствуйте.

Протестировал Ваш скрипт на Microsoft Windows 7 Professional Service Pack 1 x64 Russian

Возвращает, что у меня Windows Vista, Service Pack 1 X64 - картинка Безымянный.png

У меня не Windows Vista, а Windows 7

При этом этот Ваш скрипт перейти на Microsoft Windows 7 Professional Service Pack 1 x64 Russian работает так - картинка Безымянный1.png

По моей идее у меня должно быть Case 6.1

Точнее может быть оно и выбирается Case 6.1 , только Switch $dwMajorVersion возвращает не 6.1, а 6

6.1 по моей идее будет возвращать типа Switch $dwMajorVersion + $dwMinorVersion

Пожалуйста, помогите
 

Вложения

  • Безымянный.png
    Безымянный.png
    101.2 КБ · Просмотры: 8
  • Безымянный1.png
    Безымянный1.png
    108.5 КБ · Просмотры: 6
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Исправь:

Код:
Switch $dwMajorVersion + Number('0.' & $dwMinorVersion)

В примере выше поправил.
 
Последнее редактирование:
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
CreatoR
И не только

Всем здравствуйте.

Вот что-то, а мозги поломать придется точно:acute:

Вот, смотрите, а как использовать этот код перейти чтобы и на Windows 10 работало, и на Windows 2000 работало?

У меня
- операционная система: Microsoft Windows 7 Professional Service Pack 1 x64 Russian
- AutoIt: 3.3.14.5

При запуске на Microsoft Windows 2000 Professional Service Pack 4 x86 Russian - ошибка

При запуске наMicrosoft Windows 10 Professional x86 Russian - все рабоатет

Пожалуйста, помогите

Эм, для меня это нестандартная задача, уж чоень хочется ее решения
 

Вложения

  • 2019-12-28-21-55-39.png
    2019-12-28-21-55-39.png
    79.7 КБ · Просмотры: 13
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Компилировать в х86. Либо, использовать старую версию языка. Такое сообщение появляется, когда разрядность программы не соответствует разрядности системы
 
Автор
S

SharkyEXE

Новичок
Сообщения
134
Репутация
0
joiner

Здравствуйте..

А вот эту версию перейти не поможите, пожалуйста, адаптировать с этой версией перейти?

С этой версией перейти нормально

Как это сделать - установил autoit-v3.3.6.1-setup.exe и именно этой версией компилировал в exe файл скрипт отсюда перейти
 

Вложения

  • 2019-12-29-14-52-19.png
    2019-12-29-14-52-19.png
    229.5 КБ · Просмотры: 9
  • 2019-12-29-14-49-27.png
    2019-12-29-14-49-27.png
    75.4 КБ · Просмотры: 9
Статус
Закрыто для дальнейших ответов.
Верх