Что нового

Нажатие на кнопку, меняющую свой id.

MrGep

Новичок
Сообщения
74
Репутация
1
Версия AutoIt: 3.

Описание: Доброе время суток, уважаемые) Имеется программа, в которой есть две кнопки

-
71ffc48b9850.jpg


Необходимо нажать кнопку "Фарм!" в свернутой программе, но кнопка с каждой перезагрузкой меняет свой id.

Вот summary от Window Info
>>>> Window <<<<
Title: 4
Class: TForm1
Position: -8, -8
Size: 1382, 744
Style: 0x17CF0000
ExStyle: 0x00010100
Handle: 0x002605F4

>>>> Control <<<<
Class:
Instance:
ClassnameNN:
Name:
Advanced (Class): [CLASS:; INSTANCE:]
ID: 40308028
Text: Фарм!
Position: 712, 10
Size: 73, 25
ControlClick Coords: 41, 17
Style: 0x54010001
ExStyle: 0x00000000
Handle: 0x02670D3C

>>>> Mouse <<<<
Position: 753, 69
Cursor ID: 0
Color: 0xF0F0F0

>>>> StatusBar <<<<

>>>> ToolsBar <<<<

>>>> Visible Text <<<<
Стоп
Фарм!



>>>> Hidden Text <<<<
mmo2


Примечания:
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Можно перебрать коллекцию элементов окна и вернуть текст с элемента, если у этого элемент текст == "Фарм!", то возвращаем найденный id.
 
Автор
M

MrGep

Новичок
Сообщения
74
Репутация
1
А можно точнее?) Я хотел так сделать, но моих знаний не хватило для считывания текста с элементов(
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Примерно так:

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

$hForm = GUICreate('', 300, 200)
$iButton = GUICtrlCreateButton('Фарм!', 20, 20, 80, 20)
GUISetState()

$aTest = ControlGetInfo($hForm, 'Фарм!')

MsgBox(0, '', 'hWnd:' & @TAB & $aTest[0] & @CRLF & _
              'Id:' & @TAB & $aTest[1] & @CRLF & _
              'Class:' & @TAB & $aTest[2])

While 1
    Switch GUIGetMsg()
        Case -3
            Exit
    EndSwitch
WEnd

Func ControlGetInfo($hWnd, $sText)
    Local $iRet[3] = [0, 0, 0]
    Local $iEnum = _WinAPI_EnumChildWindows($hWnd)
    For $i = 1 To Ubound($iEnum) -1
        If ControlGetText($iEnum[$i][0], '', '') == $sText Then
            $iRet[0] = $iEnum[$i][0]
            $iRet[1] = _WinAPI_GetDlgCtrlID($iEnum[$i][0])
            $iRet[2] = _WinAPI_GetClassName($iEnum[$i][0])
        EndIf   
    Next  
	Return $iRet
EndFunc
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
А такой код не пойдет? :whistle:

Код:
$sText="моя прога" ;заголовок окна программы
ControlClick($sText,"","Фарм!")
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Подойдёт, но в таком виде

Код:
ControlClick(WinGetHandle('моя прога'), 'Фарм!', '')


Попробуйте, может получится.
 
Автор
M

MrGep

Новичок
Сообщения
74
Репутация
1
Спасибо всем за помощь, остановился на варианте, предложенном WSWR )
 
Верх