AutoIt:v3.3.14.2
Категория:Элементы GUI
Описание:
Добрый день, уважаемы форумчане.
Ситуация следующая: есть рабочее приложение. В связи с некоторыми обстоятельствами потребовалось добавить дополнительную проверку при нажатии на кнопку в одном из окон этого приложения. Поскольку исходников приложения у меня нет, а автор отказывается дорабатывать его, было принято решение поверх его кнопки нарисовать скриптом свою.
После изучения материалов справки и форума получилось нарисовать кнопку, получить данные формы, которые надо проверять, заблокировать/разблокировать рабочую кнопку приложения, "нажать" кнопку приложения, но вот обработчик нажатия моей нарисованной кнопки работать не хочет. Подскажите, пожалуйста, как правильно его написать?
И еще один вопрос, на который никак не могу найти ответ и даже не очень представляю, в каких разделах справки или форума искать: скрипт должен срабатывать автоматически, когда появляется определенное окно рабочего приложения. Какими средствами это можно сделать?
Мне кажется, что вариант, с запуском скрипта по расписанию не подойдет, т.к. пользователь может нажать на кнопку в приложении раньше, чем сработает скрипт, и тогда необходимые проверки не будут выполнены.
Код/Пример:
Категория:Элементы GUI
Описание:
Добрый день, уважаемы форумчане.
Ситуация следующая: есть рабочее приложение. В связи с некоторыми обстоятельствами потребовалось добавить дополнительную проверку при нажатии на кнопку в одном из окон этого приложения. Поскольку исходников приложения у меня нет, а автор отказывается дорабатывать его, было принято решение поверх его кнопки нарисовать скриптом свою.
После изучения материалов справки и форума получилось нарисовать кнопку, получить данные формы, которые надо проверять, заблокировать/разблокировать рабочую кнопку приложения, "нажать" кнопку приложения, но вот обработчик нажатия моей нарисованной кнопки работать не хочет. Подскажите, пожалуйста, как правильно его написать?
И еще один вопрос, на который никак не могу найти ответ и даже не очень представляю, в каких разделах справки или форума искать: скрипт должен срабатывать автоматически, когда появляется определенное окно рабочего приложения. Какими средствами это можно сделать?
Мне кажется, что вариант, с запуском скрипта по расписанию не подойдет, т.к. пользователь может нажать на кнопку в приложении раньше, чем сработает скрипт, и тогда необходимые проверки не будут выполнены.
Код/Пример:
Код:
#include <GUIConstantsEx.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>
Global $btn, $rdo, $chk, $aPos, $hControl, $hGUI, $hCombo, $hTextbox
_Main()
Func _Main()
;получаем дескриптор окна
$hGUI = WinGetHandle("Form1")
;блокируем родную кнопку формы
$hControl = ControlGetHandle($hGUI, "", "[CLASS:WindowsForms10.BUTTON.app.0.33c0d9d; iNSTANCE:1]")
ControlDisable ( $hGUI, "", $hControl )
;поверх заблокированной рисуем свою
$aPos = ControlGetPos($hGUI, '', 'OK')
$btn = _GUICtrlButton_Create($hGUI, "Кнопка1", $aPos[0], $aPos[1], $aPos[2], $aPos[3])
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
GUISetState()
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
Exit
EndFunc ;==>_Main
; Реакция на нажатие кнопки
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
#forceref $hWnd, $Msg
Local $nNotifyCode = BitShift($wParam, 16)
Local $nID = BitAND($wParam, 0x0000FFFF)
Local $hCtrl = $lParam
Local $sText = ""
Switch $hCtrl
Case $btn,
Switch $nNotifyCode
Case $BN_CLICKED
$sText = "Здесь будет выполняться проверка введенных данных"
;удаляем свою кнопку
_GUICtrlButton_Destroy($btn)
;разблокируем кнопку формы и "нажимаем" ее
ControlEnable ( $hGUI, "", $hControl )
ControlClick( $hGUI, "", $hControl, "left", 1)
EndSwitch
MsgBox(0,"", $sText)
Return 0 ; Только для теста нажатия кнопки
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND