1

Тема: AHK: GetOSVersion

Я написал скрипт, но в разных версиях Windows нужно нажимать по разному. Нашел вот такой код:

If (GetOSVersion() > 7)
{

И попытался написать вот так:

If (GetOSVersion() > 7)
{
мой код
}

Но AHK выдает ошибку:


Error:  Call to nonexistent function.
Specifically : GetOSVersion() > 7)

Подскажите что не так, или может вообще не тот код это.

2

Re: AHK: GetOSVersion

D@rkSIDeR008 пишет:

в разных версиях Windows нужно нажимать по разному

Куда нажимать-то?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: GetOSVersion

teadrinker пишет:
D@rkSIDeR008 пишет:

в разных версиях Windows нужно нажимать по разному

Куда нажимать-то?

Есть программа для удаленного доступа, я через нее на сервер подключаюсь со своего компьютера, через ярлык *rdp
https://prnt.sc/RX28aRe1kEGT
И я написал скрипт что бы вводить логин и пароль, и далее сам входил в 1С.
Но в разных версиях Windows немного по разному оформлено окно ввода логина и пароля, поэтому и хочу что бы скрипт определял версию Windows и запускал соответственный ему код.
Типа


Если Windows 7 то такой код
Если Windows 8 то такой код
Если Windows 10 то такой код
Если Windows 11 то такой код

Ну это в идеале. Но на такое у меня знаний не хватает
Поэтому подумал написать вот так:


If (GetOSVersion() <= 8)
{
мой код
}
Else
{
Второй код
}

4

Re: AHK: GetOSVersion

D@rkSIDeR008 пишет:

Нашел вот такой код:

If (GetOSVersion() > 7)
{

Но AHK выдает ошибку:


Error:  Call to nonexistent function.
Specifically : GetOSVersion() > 7)

Чтобы вызвать функцию, она должна быть где-то определена. В AHK нет такой встроенной функции, как GetOSVersion(), значит она должна быть определена в коде скрипта.
Для получения версии ОС в AHK есть встроенная переменная A_OSVersion, для сравнения версий есть функция VerCompare().

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: GetOSVersion

Получается, нужно написать код вот так:


if A_OSVersion in WIN_7,WIN_8,WIN_8.1,
{
мой код
}

if A_OSVersion in WIN_10,WIN_11,
{
другой код
}

Пока проверил только на win 8, скрипт работает, чуть позже проверю на Win 10.

6

Re: AHK: GetOSVersion

Боюсь, у вас не хватило терпения прочитать статью по ссылке до конца.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: GetOSVersion

Ну там была коротенькая статейка, дальше про другие функции.
Там было написано вот это:


если  A_OSVersion  в  WIN_NT4,WIN_95,WIN_98,WIN_ME   ; Примечание: без пробелов вокруг запятых.
{
    MsgBox  Для этого скрипта требуется Windows 2000 /XP или более поздняя версия. 
    Выход из приложения 
}

Это я и применил.
А что мой код неверен?

8

Re: AHK: GetOSVersion

Вот эту часть пропустили:

If the OS version is not recognized as one of those listed above, a string in the format "major.minor.build" is returned. For example, 10.0.14393 is Windows 10 build 14393, also known as version 1607.

WIN_10 и WIN_11 не существует, начиная с 10 эта переменная возвращает версию в виде 10.0.14393.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: GetOSVersion

Попробовал как описано:


if A_OSVersion in 10.0.22621 

Но ничего не происходит.
Пока просто написал внизу


Else

10

Re: AHK: GetOSVersion

Но


Else

почему то, не дает работать коду дальше самой.
Видимо это не выход.

11

Re: AHK: GetOSVersion

Имхо, запутались в трёх соснах. Я бы использовал VerCompare().

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: GetOSVersion

teadrinker пишет:

Имхо, запутались в трёх соснах. Я бы использовал VerCompare().

Наверно.
Но у меня не хватает знаний что бы понять, читаю про это но не понимаю)

13

Re: AHK: GetOSVersion

switch {
   case RegExMatch(A_OsVersion, "WIN_\K.+", m)     : win := m
   case VerCompare(A_OsVersion, "10.0.22000") >= 0 : win := 11
   case VerCompare(A_OsVersion, "10.0.10240") >= 0 : win := 10
}
MsgBox % "Windows " . win
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14

Re: AHK: GetOSVersion

Я так понимаю


Switch

сравнивает строки а,

VerCompare

Сравнивает 2 значения.
Но ваш скрипт, выдает версию Windows.
А как мне вместо:

MsgBox

Вставить свой код, для его выполнения?
Я попробовал как описывалось в статье но он выдает ошибку что такой функции нет:

If VerCompare(A_OsVersion, "10.0.22000")
{
}

15

Re: AHK: GetOSVersion

Если нет VerCompare(), значит установлена устаревшая версия AHK, обновите.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: GetOSVersion

Хм, почему то не важно что я пишу в параметр A_OsVersion, скрипт все равно выполняется.

If VerCompare(A_OsVersion, "WIN_7")
{

}

If VerCompare(A_OsVersion, "WIN_8")(A_OsVersion, "WIN_8.1")
{
}

То есть, я вставляю код после WIN_8, он выполняется. Вставляю после WIN_7 он все равно выполняется.
Видимо я что то не так пишу.

17

Re: AHK: GetOSVersion

Можно и без VerCompare:

msgbox % StrSplit(A_OsVersion, ".")[3]

18 (изменено: D@rkSIDeR008, 2023-07-20 07:20:27)

Re: AHK: GetOSVersion

Malcev пишет:

Можно и без VerCompare:

msgbox % StrSplit(A_OsVersion, ".")[3]

Вот это вообще не понял.

19

Re: AHK: GetOSVersion

D@rkSIDeR008, ознакомьтесь, пожалуйста, с Правилами, отредактируйте свои посты. Обратите внимание на точки в конце предложений.

VerCompare() работает только с представлением версий в виде 10.0.22000, не работает с WIN_7.

Malcev пишет:

Можно и без VerCompare

Нужно сначала проверить, не возвращён ли результат в виде WIN_7.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20

Re: AHK: GetOSVersion

AHK почему то игнорирует это условие:


If VerCompare(A_OsVersion, "10.0.10240")
{

И не важно что я туда вписываю, будь то WIN_7 которое я понял что неправильно либо 10.0.10240.
AHK как будто минует это условие, и просто дальше исполняет код.

21

Re: AHK: GetOSVersion

А как это условие должно работать? Смотрите справку, что VerCompare() возвращает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

22

Re: AHK: GetOSVersion

Спасибо, вроде разобрался.
Вроде бы все получилось и работает.


If A_OsVersion in WIN_8,WIN_8.1
{
}
If VerCompare(A_OsVersion, "10.0.22000") >= 0
{
}