Что нового

Кнопка "Start" с нулевым ID

berkut9737

Новичок
Сообщения
22
Репутация
0
Проблема с нажатием кнопки "Start" с нулевым ID

Вот скриншот AutoIt Window Info

8018b68787f0.png


Вот скриншот самой кнопки "Start"

9bfe57b69e2d.png


Далее, следует код скрипта

Код:
; запускаем программу Tweak-XP.
Run (@ProgramFilesDir & '\Tweak-XP Pro 4\tweak-xp.exe')
; Прервать выполнение скрипта до момента активизации указанного окна. 
WinWaitActive ("Tweak-XP Pro v4", "", 9)
; Установить фокус ввода на указанном элементе окна, в данном случае на кнопке "Start" 
ControlFocus ("Tweak-XP Pro v4", "Start", "ThunderRT6UserControlDC")
; Симулировать нажатие кнопки мыши для заданного управляющего элемента.
ControlClick ( "Tweak-XP Pro v4", "Start", "ThunderRT6UserControlDC", left , 1)
 
Автор
B

berkut9737

Новичок
Сообщения
22
Репутация
0
Подскажите, пож., где кроется ошибка? Спасибо.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Ну и зачем тебе понадобился ID? Во-первых, он не нулевой, а просто не определен (-1). ID - это внутренний номер элемента диалогового окна, и в данном случае не представляет интерес. Тебе нужно знать только Class и Instance или ClassnameNN, как совокупность первых двух. К слову, Instance, это ни что иное, как внутренняя нумерация элементов в AutoIt.

Код:
ControlClick("Tweak-XP Pro v4", "", "ThunderRT6UserControlDC7")
 
Автор
B

berkut9737

Новичок
Сообщения
22
Репутация
0
Yashied
Ну и зачем тебе понадобился ID? Во-первых, он не нулевой, а просто не определен (-1). ID - это внутренний номер элемента диалогового окна, и в данном случае не представляет интерес. Тебе нужно знать только Class и Instance или ClassnameNN, как совокупность первых двух. К слову, Instance, это ни что иное, как внутренняя нумерация элементов в AutoIt.
Простите, ваша правда. Я раньше работал в подобной программе и ещё не отвык от старого мышления. Подправил скрипт, но кнопка осталась, как вкопанная. Её можно удалить, свернуть, переместить на экране компа, а нажать никак не получается.

Код:
; запускаем программу Tweak-XP.
Run (@ProgramFilesDir & '\Tweak-XP Pro 4\tweak-xp.exe')
; Прервать выполнение скрипта до момента активизации указанного окна. 
WinWaitActive ("Tweak-XP Pro v4", "", 10)
; Установить фокус ввода на указанном элементе окна, в данном случае на кнопке "Start" 
ControlFocus ("Tweak-XP Pro v4", "", "ThunderRT6UserControlDC7")
; Симулировать нажатие кнопки мыши для заданного управляющего элемента.
ControlClick ( "Tweak-XP Pro v4", "", "ThunderRT6UserControlDC7")
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Ну значит это не кнопка, а Static... Собственно "DC" в названии класса и наводит на эту мысль.

Код:
#Include <WinAPI.au3>

_Click("Tweak-XP Pro v4", "", "ThunderRT6UserControlDC7")

Func _Click($hWnd, $sText, $CtrlID)
	$hWnd = ControlGetHandle($hWnd, $sText, $CtrlID)
	If @error Then
		Return 0
	EndIf
	_SendMessage($hWnd, 0x0200, 0, 0)
	Sleep(50)
	_SendMessage($hWnd, 0x0201, 1, 0)
	Sleep(50)
	_SendMessage($hWnd, 0x0202, 1, 0)
	Return 1
EndFunc   ;==>_Click
 
Автор
B

berkut9737

Новичок
Сообщения
22
Репутация
0
Yashied
Ну значит это не кнопка, а Static... Собственно "DC" в названии класса и наводит на эту мысль.
Проверьте пож., скрипт? Прога запускается, а дальше этой кнопки дело опять не двигается. Самое интересное, что впереди есть ещё одна, но я думаю, если эта активируется, то со второй будет справиться легче.
Код:
#Include <WinAPI.au3>
; запускаем программу Tweak-XP.
Run (@ProgramFilesDir & '\Tweak-XP Pro 4\tweak-xp.exe')
; Прервать выполнение скрипта до момента активизации указанного окна. 
WinWaitActive ("Tweak-XP Pro v4", "", 10)

_Click('Tweak-XP Pro v4', '', 'ThunderRT6UserControlDC7')

Func _Click($hWnd, $sText, $CtrlID)

    Local $Pos, $lParam

    $hWnd = ControlGetHandle($hWnd, $sText, $CtrlID)
    If @error Then
        Return 0
    EndIf
    $Pos = ControlGetPos($hWnd, '', 0)
    If @error Then
        Return 0
    EndIf
    $lParam = _WinAPI_MakeLong($Pos[0], $Pos[1])
    _SendMessage($hWnd, 0x0200, 0, $lParam)
    Sleep(50)
    _SendMessage($hWnd, 0x0201, 1, $lParam)
    Sleep(50)
    _SendMessage($hWnd, 0x0202, 1, $lParam)
    Return 1
EndFunc   ;==>_Click
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
berkut9737 сказал(а):
Yashied, проверьте пож., скрипт?

Я не могу. У меня нет Tweak-XP, да и вообще Windows 7.

:smile:

А для кнопки "Full version..." работает?
 
Автор
B

berkut9737

Новичок
Сообщения
22
Репутация
0
Re: Кнопка \"Start\" с нулевым ID

Yashied
Я не могу. У меня нет Tweak-XP, да и вообще Windows 7.

У меня VM VirtualBox стоит, на ней я и эксперементирую.

А для кнопки "Full version..." работает?

Кнопка "Full version..." вздрагивает при отработке скрипта, но не более.




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

Ещё хочу добавить. Когда открывается окошко программы,то в кнопке "Start" начинается отсчёт времени, примерно, секунды 4. Может быть тему изменить на "Глухая кнопка "Start""?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Тогда, видимо, только так:

Код:
Opt('MouseCoordMode', 2)
Opt('WinWaitDelay', 0) 

Run(@ProgramFilesDir & '\Tweak-XP Pro 4\tweak-xp.exe')
$hWnd = WinWaitActive('Tweak-XP Pro v4', '', 10)
If Not $hWnd Then
	Exit
EndIf
$hButton = ControlGetHandle($hWnd, '', 'ThunderRT6UserControlDC7')
$Timer = TimerInit()
Do
	Sleep(100)
Until (ControlGetText($hButton, '', 0) = 'Start') Or (TimerDiff($Timer) > 10000)
$Pos = ControlGetPos($hButton, '', 0)
If Not @error Then
	MouseClick('left', $Pos[0] + 4, $Pos[1] + 4, 1, 0)
EndIf
 
Автор
B

berkut9737

Новичок
Сообщения
22
Репутация
0
Ещё раз проверил. WinWaitActive не работает, т.е, задержку времени в 8-10 сек., что я установил функция не выполняет, а сразу переходит к вашей половине скрипта, а такого быть не должно, поскольку, как я сообщил выше в "Start" встроен секундамер в 4-5 секунды, который нужно пройти. Получается, что пока работает секундамер, кнопка выглядит нажатой с помощью скрипта, а после отсчёта снова выпуклой и поэтому не активируется.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Я установил Tweak-XP, и последний мой вариант прекрасно отрабатывает.

;)
 
Автор
B

berkut9737

Новичок
Сообщения
22
Репутация
0
Re: Кнопка \"Start\" с нулевым ID

Yashied, гениально! :IL_AutoIt_1:


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

Yashed
Я установил Tweak-XP, и последний мой вариант прекрасно отрабатывает.

Простите, я немного запоздал с ответом! Спасибо! :ok:
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
berkut9737 сказал(а):
Ещё раз проверил. WinWaitActive не работает, т.е, задержку времени в 8-10 сек., что я установил функция не выполняет...

Это не задержка, а время, в течении которого должно активироваться указанное окно. Если в течении этого времени окно так и не активировалось, то WinWaitActive() возвращает 0. Если окно активируется раньше, то функция возвращает дескриптор окна. После этой функции всегда нужно проверять результат ее выполнения. Если 0, то ошибка...

Если нужна просто задержка, например 10 сек., то пиши

Код:
Sleep(10 * 1000)
 
Автор
B

berkut9737

Новичок
Сообщения
22
Репутация
0
Это не задержка, а время, в течении которого должно активироваться указанное окно. Если по истесчении этого времени окно не активируется, то WinWaitActive() возвращает 0. Если окно активируется раньше, то функция возвращает дескриптор окна. После этой функции всегда нужно проверять результат ее выполнения. Если 0, то ошибка...
Если нужна просто задержка, например 10 сек., то пиши
Код:
Sleep(10 * 1000)
Спасибо, запомнил и записал.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
berkut9737
{CodeWarn}
 
Верх