Что нового

Как узнать что клик мыши произошел по отслеживаемой кнопке ?

vaf

Новичок
Сообщения
172
Репутация
2
Добрый день, уважаемые коллеги.
Вопрос, как узнать что клик мыши произошел по кнопке Advanced (Class): [NAME:btnNext]
надпись на кнопке Text: Следующий

отслеживание клика я реализовал, не могу сделать именно проверку. т.е. мне нужно чтобы если нажали по Advanced (Class): [NAME:btnNext] с надписью "Следующий" то делать определенные действия в ином случае ничего не делать.
 

Glass4217

Знающий
Сообщения
117
Репутация
13
Отслеживать текст в окне?
Эти данные доступны?
Перед нажатием на кнопку считываем доступный текст, а после нажатия считываем еще раз, если текст совпадает значит нажатие на кнопку не произошло, а если текст изменился значит цель достигнута.
Это один из вариантов, слишком мало данных от вас.
 
Автор
V

vaf

Новичок
Сообщения
172
Репутация
2
Привожу данные с Window Info

Title: Окно 2: Сорокина Любовь Федоровна - Пульт оператора v.1.0.82.0
Class: WindowsForms10.Window.8.app.0.9fe31_r12_ad1
Position: 619, 298
Size: 333, 624
Style: 0x16CA0000
ExStyle: 0x00050100
Handle: 0x00050D4A

>>>> Control <<<<
Class: WindowsForms10.BUTTON.app.0.9fe31_r12_ad1
Instance: 7
ClassnameNN: WindowsForms10.BUTTON.app.0.9fe31_r12_ad17
Name: btnNext
Advanced (Class): [NAME:btnNext]

ID: 396576
Text: Следующий
Position: 4, 387
Size: 319, 36
ControlClick Coords: 187, 14
Style: 0x5601000B
ExStyle: 0x00000000
Handle: 0x00060D20

Title оно у всех разное, так же Class так же у всех разные, ID тоже разные единственное на что можно ориентироваться на Advanced (Class): [NAME:btnNext] и на Text: Следующий
Нужно узнать, нажали ли на кнопку [NAME:btnNext] с надписью Text: Следующий
Сообщение автоматически объединено:

Что удалось добиться.
Во время нажатия на кнопку, через ControlGetFocus (WinGetTitle ("[ACTIVE]"), '') я получаю ClassnameNN.
Как Получить Text данного ClassnameNN ?
 
Последнее редактирование:

Tempo

Скриптер
Сообщения
603
Репутация
197
Код:
;~ AutoIt Version: 3.3.14.5
;~ Author:         Tempo
#RequireAdmin
#include <GUIConstants.au3>
#include <WinAPISys.au3>
#include <Memory.au3>

Global $g_hGui_RawClick
Global $g_idDummy_RawClick
Global $g_hWnd_RawClick
example()

Func example()
    Opt('TrayAutoPause', 0)
    $g_hGui_RawClick = GUICreate(@ScriptName, 300, 200, -1, -1, -1, $WS_EX_TOPMOST)
    $g_idDummy_RawClick = GUICtrlCreateDummy()
    Local $idButton_Close = GUICtrlCreateButton('Закрыть', 50, 50, 200, 100)

    Local $tRawInputDevice = DllStructCreate($tagRAWINPUTDEVICE)
    With $tRawInputDevice
        .UsagePage = 0x01 ; HID_USAGE_PAGE_GENERIC
        .Usage = 0x02 ; HID_USAGE_GENERIC_MOUSE
        .Flags = $RIDEV_INPUTSINK
        .hTarget = $g_hGui_RawClick
    EndWith
    _WinAPI_RegisterRawInputDevices($tRawInputDevice)

    GUIRegisterMsg($WM_INPUT, WM_INPUT)
    GUISetState(@SW_SHOWMINIMIZED)

    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idButton_Close
                ExitLoop
            Case $g_idDummy_RawClick
                Switch _WinGetName($g_hWnd_RawClick)
                    Case 'btnNext'
                        MsgBox($MB_SYSTEMMODAL, Default, 'Click: btnNext')
;~                     Case 'btnPrev'
                EndSwitch
        EndSwitch
    WEnd
EndFunc   ;==>example

Func WM_INPUT($hGui, $iMsg, $wParam, $lParam)
    #forceref $iMsg, $wParam
    Switch $hGui
        Case $g_hGui_RawClick
            Local $tRawInputMouse = DllStructCreate($tagRAWINPUTMOUSE)
            If _WinAPI_GetRawInputData($lParam, $tRawInputMouse, DllStructGetSize($tRawInputMouse), $RID_INPUT) Then
                If $tRawInputMouse.ButtonFlags = $RI_MOUSE_LEFT_BUTTON_UP Then
                    Local $tPoint = _WinAPI_GetMousePos()
                    $g_hWnd_RawClick = _WinAPI_WindowFromPoint($tPoint)
                    If $g_hWnd_RawClick Then GUICtrlSendToDummy($g_idDummy_RawClick)
                EndIf
            EndIf
;~         Case $g_hGui
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_INPUT

Func _WinGetName($hWnd)
;~     https://referencesource.microsoft.com/UIAutomationClientsideProviders/R/d909145577c98032.html
    Local $tBuffer = DllStructCreate('wchar[2000]')
    Local $iBufferSize = DllStructGetSize($tBuffer)
    Local $tMemMap
    Local $pMem = _MemInit($hWnd, $iBufferSize, $tMemMap)
    _SendMessage($hWnd, _WinAPI_RegisterWindowMessage('WM_GETCONTROLNAME'), 2000, $pMem)
    _MemRead($tMemMap, $pMem, $tBuffer, $iBufferSize)
    _MemFree($tMemMap)
    Return DllStructGetData($tBuffer, 1)
EndFunc   ;==>_WinGetName
 
Последнее редактирование:
Верх