Что нового

Изменить текст в "EDIT" если нет controlID

passwd

Новичок
Сообщения
30
Репутация
0
Здравствуйте. Пытаюсь сменить текст в поле программы.
При использовании AutoIt V3 Window Info определяет класс только окна, в котором находится этот Edit.
Текст от Edit есть в списке "Visible Text" в AutoIt V3 Window Info.

Пробовал такой код:
Код:
Func ModellerSet()
;$ModellerSets = ControlGetHandle("FaceGen Modeller", "", "[CLASS:SysTabControl32; INSTANCE:1]")
ControlSetText ("FaceGen Modeller", "", "[CLASS:SysTabControl32; TEXT:20.05]", "0")
EndFunc


Так же пробовал с ControlSend. Ничего не срабатывает. Подскажите как можно сменить текст в этом Edit или определить ControlID.
 

Вложения

  • 1.png
    1.png
    86.5 КБ · Просмотры: 20
A

Alofa

Гость
InnI сказал(а):
Поддерживаю.

Код:
Local $hWnd = WinWait('[CLASS:FaceGenMainWinClass]', '', 60)
If Not $hWnd Then Exit MsgBox(16, 'Ошибка!', 'Окно программы так и не появилось.')

If Not ModellerSet() Then MsgBox(16, 'Ошибка!', 'Что-то пошло не так.' & @LF & '@error = ' & @error)

Func ModellerSet()
	Local $hTabItem, $iNumTab, $sCommand
	$hTabItem = ControlGetHandle($hWnd, '', '[CLASS:SysTabControl32; INSTANCE:1]')
	If Not $hTabItem Then Return SetError(1, 0, 0)
	$iNumTab = ControlCommand($hWnd, '', $hTabItem, 'CurrentTab')
	If $iNumTab <> 3 Then
		Select
			Case $iNumTab < 3
				$sCommand = 'TabRight'
				$iNumTab = 3 - $iNumTab
			Case $iNumTab > 3
				$sCommand = 'TabLeft'
				$iNumTab -= 3
		EndSelect
		For $i = 1 To $iNumTab
			ControlCommand($hWnd, '', $hTabItem, $sCommand)
		Next
	EndIf
	WinActivate($hWnd)
	ControlFocus($hWnd, '', '[CLASS:Edit; ID:1391]')
	If Not ControlSetText($hWnd, '', '[CLASS:Edit; ID:1391]', '0') Then Return SetError(2, 0, 0)
	ControlFocus($hWnd, '', '[CLASS:msctls_trackbar32; ID:1387]')
	Return 1
EndFunc   ;==>ModellerSet
 
Автор
passwd

passwd

Новичок
Сообщения
30
Репутация
0
Большое спасибо вам.
Особенно Alofa!!! Ваш вариант сработал идеально и красиво! Я боюсь, что Вам пришлось устанавливать эту программку, чтобы показать пример. Мне очень не удобно, что пришлось делать это всё, но невероятно приятно =) =) =)
Проблема решилась действительно очень просто после запуска Control Viewer. Нашел идентификаторы и начал отсылать им значения. Но возникла вторая проблема, я использовал эти команды немного по другому, и по этому изменение значений не вызывали действий в программе. Но достаточно было просто навести фокус перед изменением значений, как они начали применяться.

Код:
HotKeySet ( "0", "ModellerSet" )

While 1
    Sleep(100)
WEnd

Func ModellerSet()
$ModellerWindow = WinGetHandle("[CLASS:FaceGenMainWinClass]")

ControlFocus($ModellerWindow, '', '[CLASS:Edit; ID:1391]')
ControlSetText($ModellerWindow, '', '[CLASS:Edit; ID:1391]', '0')
ControlFocus($ModellerWindow, '', '[CLASS:5; ID:1397]')
EndFunc
 
Верх