Автор Тема: Считывание значения элемента  (Прочитано 295 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 494
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Есть скрипт, который нажимает определенную кнопку, в зависимости от значения, в окне, которое появляется на незарегистрированном TotalCommander. В Win7 все работает замечательно, а в Win10 есть одна особенность.
Если в Win10 Total находится в папке Program Files, то значение не считывается. Если Total поместить в другую папку, в доступ которой не нужны права администратора, то значение считывается.
Запуск скрипта от имени администратора не решает проблему.
Что можно сделать в данном случае?

Код: AutoIt [Выделить]
If FileExists(@ScriptDir&'\TOTALCMD64.EXE') Then
    Run(@ScriptDir&'\TOTALCMD64.EXE')
ElseIf FileExists(@ScriptDir&'\TOTALCMD.EXE') Then
    Run(@ScriptDir&'\TOTALCMD.EXE')
Else
    Exit MsgBox(16, 'Запуск тотала', 'Не найден ни один из фалов запуска "TOTALCMD.EXE" или "TOTALCMD64.EXE"')
EndIf

$HWin=WinWait('[Title:Total Commander; Class:TNASTYNAGSCREEN]', '', 3)
If $HWin=0 Then Exit MsgBox(262144+16, 'Запуск тотала', 'Не найдено окно нажатия кнопки')
$Num=ControlGetText($HWin, '', 'Window4')

Switch $Num
    Case 1
        ControlClick($HWin, '', 'Button3')
    Case 2
        ControlClick($HWin, '', 'Button2')
    Case 3
        ControlClick($HWin, '', 'Button1')
    Case Else
        MsgBox(16, 'Запуск тотала', 'Считанное значение не соответствует предусмотренным, значение - '&$Num)
EndSwitch
 


Русское сообщество AutoIt

Считывание значения элемента
« Отправлен: Июнь 18, 2017, 20:06:48 »

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3410
  • Репутация: 896
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Считывание значения элемента
« Ответ #1, Отправлен: Июнь 19, 2017, 15:03:21 »
Элемент "Window4" - это для TC x64. Для версии x86 элемент будет "TPanel2", а кнопки - "TButton".

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 494

  • Автор темы
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Считывание значения элемента
« Ответ #2, Отправлен: Июнь 19, 2017, 20:53:00 »
А причем здесь версия TC x64 и x86 ?
Ставим TC x64 в папку C:\totalcmd - скрипт работает
Копируем установленный TC в папку C:\Program Files\totalcmd - скрипт не работает. При этом Autoit Info видит значение

Оффлайн InnI [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 3410
  • Репутация: 896
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Считывание значения элемента
« Ответ #3, Отправлен: Июнь 19, 2017, 21:17:54 »
Vovsla
Цитировать
причем здесь версия TC x64 и x86
При том, что в вашем скрипте при отсутствии х64 будет запущена х86, на которой скрипт работать не будет. Я предположил, что именно это у вас и происходит.

Цитировать
Копируем установленный TC в папку C:\Program Files\totalcmd
Я проверял на Win10 x64, но устанавливал сразу в "Program Files". И всё прекрасно работает.

Цитировать
При этом Autoit Info видит значение
А при чём здесь AutoIt Info? :D


Добавлено: Июнь 19, 2017, 21:28:37
Попробуйте заменить WinWait на WinWaitActive.
« Последнее редактирование: Июнь 19, 2017, 21:28:37 от InnI, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: Считывание значения элемента
« Ответ #3 Отправлен: Июнь 19, 2017, 21:17:54 »

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 494

  • Автор темы
  • Репутация: 25
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Считывание значения элемента
« Ответ #4, Отправлен: Июнь 19, 2017, 22:20:16 »
AutoIt Info при том, что некоторые данные в окне могут быть недоступны, если их не видит AutoIt Info, то просто так их не получить.

Оказывается, при запуске тотала появляется окно с надписью "НЕ ЗАРЕГИСТРИРОВАНО", видимо оно подходит к требованиям прописанным в WinWait, а уже потом запускается сам тотал, а потом появляется окно с просьбой нажать кнопку. В общем, теперь все работает...

Код: AutoIt [Выделить]
If FileExists(@ScriptDir&'\TOTALCMD64.EXE') Then
    Run(@ScriptDir&'\TOTALCMD64.EXE')
ElseIf FileExists(@ScriptDir&'\TOTALCMD.EXE') Then
    Run(@ScriptDir&'\TOTALCMD.EXE')
Else
    Exit MsgBox(16, 'Запуск тотала', 'Не найден ни один из фалов запуска "TOTALCMD.EXE" или "TOTALCMD64.EXE"')
EndIf

$Time=TimerInit()
Do
    $HWin=WinWait('[Title:Total Commander; Class:TNASTYNAGSCREEN]', '', 3)
    If $HWin=0 Or TimerDiff($Time)/1000>=3 Then Exit MsgBox(262144+16, 'Запуск тотала', 'Не найдено окно нажатия кнопки')
    $Num=ControlGetText($HWin, '', 'Window4')
Until $Num<>''

Switch $Num
    Case 1
        ControlClick($HWin, '', 'Button3')
    Case 2
        ControlClick($HWin, '', 'Button2')
    Case 3
        ControlClick($HWin, '', 'Button1')
    Case Else
        MsgBox(16, 'Запуск тотала', 'Считанное значение не соответствует предусмотренным, значение - '&$Num)
EndSwitch
 


Русское сообщество AutoIt

Re: Считывание значения элемента
« Ответ #4 Отправлен: Июнь 19, 2017, 22:20:16 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
8 Ответов
4792 Просмотров
Последний ответ Июнь 30, 2012, 18:28:58
от CreatoR
6 Ответов
3053 Просмотров
Последний ответ Октябрь 17, 2012, 08:53:09
от PoleschenkoKV
2 Ответов
2050 Просмотров
Последний ответ Май 22, 2014, 09:11:41
от atmel007
9 Ответов
1268 Просмотров
Последний ответ Сентябрь 15, 2014, 18:24:47
от InnI
16 Ответов
3582 Просмотров
Последний ответ Июнь 22, 2015, 18:53:07
от Gen345
1 Ответов
2030 Просмотров
Последний ответ Май 05, 2016, 17:40:46
от ZeVSalt
7 Ответов
1528 Просмотров
Последний ответ Август 01, 2016, 19:54:24
от Vovsla
7 Ответов
1389 Просмотров
Последний ответ Август 23, 2016, 21:27:38
от Dk
2 Ответов
1064 Просмотров
Последний ответ Август 31, 2016, 11:39:58
от Sol Vento
2 Ответов
467 Просмотров
Последний ответ Февраль 17, 2017, 08:09:08
от Garrett