Что нового

WinControlSetEvent - Обработка событии нажатия на элементы указанного окна

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 166
Репутация
2 331
AutoIt: 3.3.6.1
Версия: 1.2
Категория: Окна / Элементы управления
Описание: Устанавливает событие для элементов управления определённого окна. Полезно для слежения за нажатием кнопок во внешних приложениях (окнах).

Пример:
Код:
#include <WinControlSetEvent.au3>

;============== Calc Demo ==============
;In this example we use the main loop to avoid blocking of mouse processing from inside CalcGetResult_Proc() function.

HotKeySet("^q", "_Quit")

$iGetCalcResults = False

Run("Calc.exe")

If Not WinWait("[CLASS:SciCalc]", "", 3) Then
	Exit
EndIf

For $i = 0 To 9
	_WinControlSetEvent("[CLASS:SciCalc]", String($i), "", "", _
		"_CalcGetResult_Trigger_Proc", "'" & $i & "' Button has been pressed")
Next

_WinControlSetEvent("[CLASS:SciCalc]", "=", "", "", "_CalcGetResult_Trigger_Proc", "'=' Button has been pressed")
_WinControlSetEvent("[CLASS:SciCalc]", "/", "", "", "_CalcGetResult_Trigger_Proc", "'/' Button has been pressed")
_WinControlSetEvent("[CLASS:SciCalc]", "*", "", "", "_CalcGetResult_Trigger_Proc", "'*' Button has been pressed")
_WinControlSetEvent("[CLASS:SciCalc]", "-", "", "", "_CalcGetResult_Trigger_Proc", "'-' Button has been pressed")
_WinControlSetEvent("[CLASS:SciCalc]", "+", "", "", "_CalcGetResult_Trigger_Proc", "'+' Button has been pressed")

;~ _WinControlSetEvent("[CLASS:SciCalc]", "Button28", "", "", "_CalcGetResult_Trigger_Proc", "'X' Button has been pressed")

While WinExists("[CLASS:SciCalc]")
	Sleep(10)
WEnd

;Warning: blocking of this function by window messages with commands such as "Msgbox()" can lead to unexpected behavior,
;the return to the system should be as fast as possible !!!
Func _CalcGetResult_Trigger_Proc($sParams, $hWnd, $nCtrlID)
	ConsoleWrite("Passed params: " & $sParams & @CRLF)
	
	$iGetCalcResults = $nCtrlID
	AdlibRegister("_CalcGetResult_Main_Proc", 1)
EndFunc

Func _CalcGetResult_Main_Proc()
	AdlibUnRegister()
	
	If $iGetCalcResults = 168 Then Exit ;Calc closed
	
	$sCtrl_Data = ControlGetText("[CLASS:SciCalc]", "", $iGetCalcResults)
	
	If $sCtrl_Data = "=" Then
		Local $sResult = StringStripWS(ControlGetText("[CLASS:SciCalc]", "", "Edit1"), 3)
		If StringRight($sResult, 1) = "," Then $sResult = StringTrimRight($sResult, 1)
	
		ToolTip("The result has been calculated: " & $sResult, Default, Default, "Calc Info", 1, 5)
	ElseIf $sCtrl_Data <> "" Then
		ToolTip("Calc Button Pressed: " & $sCtrl_Data, Default, Default, "Calc Info", 1, 5)
	EndIf
EndFunc

Func _Quit()
	Exit
EndFunc

Screenshot: N/A

Источник: CreatoR, http://www.autoitscript.com/forum/index.php?showtopic=96003
 

dronet

Знающий
Сообщения
46
Репутация
8
вопрос на засыпку
Где взять функцию AdlibEnable и AdlibDisable :whistle:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
dronet
в последней версии дистрибутива он идет в коробке
facepalm мне
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 705
В последних версиях AutoIt, эти функции называются как AdlibRegister() и AdlibUnRegister() соответственно.
 

dronet

Знающий
Сообщения
46
Репутация
8
Это был очень тупой вопрос :wall_brake:
что-то после отпуска за бугром немогу вообше сообразить :'(
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 166
Репутация
2 331
Обновил.
 

werton

Новичок
Сообщения
1
Репутация
0
Приветствую, потребовался функционал данной UDF, но к сожалению в windows 7 работает не совсем корректно, все запущенные гуевые приложения после использования функции _WinControlSetEvent зависают при попытке нажатия кнопки свернуть или закрыть. Есть ли какое решение данной проблемы? (проверить можно непосредственно на примере с калькулятором идущем в комплекте)
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 166
Репутация
2 331
werton
Возможно проблема с разницей в битности.
Если система х64, то и скрипт должен запускаться как х64.
На 10-ке у меня всё нормально (за исключением самого примера конечно, калькулятор там сильно изменился :laugh:smile:.
 

smsgeorge

Новичок
Сообщения
15
Репутация
0
CreatoR
а как она следит.. мне как раз нужно это, вот пост..
Код:
https://autoit-script.ru/index.php?topic=23569.msg135735#msg135735
 

PopMix

Новичок
Сообщения
2
Репутация
0
Как перехватывать нажатие на пункты меню в стандартном Блокноте? Строка состояния (msctls_statusbar321) работает отлично. А с меню никак не получается. Win10 x64
 

PopMix

Новичок
Сообщения
2
Репутация
0
Есть ли способ мониторить UIA Объекты?
 
Верх