Что нового

Считывание значения элемента

vovsla

Осваивающий
Сообщения
607
Репутация
36
Есть скрипт, который нажимает определенную кнопку, в зависимости от значения, в окне, которое появляется на незарегистрированном TotalCommander. В Win7 все работает замечательно, а в Win10 есть одна особенность.
Если в Win10 Total находится в папке Program Files, то значение не считывается. Если Total поместить в другую папку, в доступ которой не нужны права администратора, то значение считывается.
Запуск скрипта от имени администратора не решает проблему.
Что можно сделать в данном случае?

Код:
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
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Элемент "Window4" - это для TC x64. Для версии x86 элемент будет "TPanel2", а кнопки - "TButton".
 
Автор
V

vovsla

Осваивающий
Сообщения
607
Репутация
36
А причем здесь версия TC x64 и x86 ?
Ставим TC x64 в папку C:\totalcmd - скрипт работает
Копируем установленный TC в папку C:\Program Files\totalcmd - скрипт не работает. При этом Autoit Info видит значение
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Vovsla
причем здесь версия TC x64 и x86
При том, что в вашем скрипте при отсутствии х64 будет запущена х86, на которой скрипт работать не будет. Я предположил, что именно это у вас и происходит.

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

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


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

Попробуйте заменить WinWait на WinWaitActive.
 
Автор
V

vovsla

Осваивающий
Сообщения
607
Репутация
36
AutoIt Info при том, что некоторые данные в окне могут быть недоступны, если их не видит AutoIt Info, то просто так их не получить.

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

Код:
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
 
Верх