Что нового

Как зажать клавишу мыши? Про mouseclickdown я уже знаю.

Статус
Закрыто для дальнейших ответов.

Фазинур

Новичок
Сообщения
52
Репутация
0
Проблема в том что controlclick только нажимает, а не зажимает клавишу мыши.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
http://autoit-script.ru/autoit3_docs/functions/AutoItSetOption.htm

MouseClickDownDelay

Или как вариант:
http://autoit-script.ru/index.php/topic,15632.msg97260.html#msg97260
Аргумент - $iClickDownTime
 
Автор
Ф

Фазинур

Новичок
Сообщения
52
Репутация
0
а mouseclickdowndelay как использовать? И вообще будет ли он колбасить мышку?




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

Я хочу чтобы зажимало клавишу мыши но сам указатель был в покое. Блин в UOpilot можно так сделать, а в auto it нет. Как это так?


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

Да и вообще, скрипт эмулирует НАВЕДЕНИЕ мыши, а мне надо зажатие.
 

blacklis

Новичок
Сообщения
64
Репутация
1
Всё тут можно, http://autoit-script.ru/autoit3_docs/ в помощь
в ссылке предыдущего оратора всё разжёванно более чем, что непонятного?
Код:
Opt("MouseClickDownDelay", [ВРЕМЯ ЗАЖАТИЯ КЛАВИШИ В МС]
Opt("MouseClickDownDelay", 120)

Это ОПЦИЯ, которая указывает, сколько времени клавиша мыши будет зажата.
А для зажатия использовать соответствующую функцию
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Фазинур [?]
в auto it нет. Как это так?
Не следует так переживать - всё есть. Вот пример
Код:
#include <SendMessage.au3>
#include <WindowsConstants.au3>

Run("notepad.exe")
$wnd = WinWaitActive("[class:Notepad]")
ControlSend($wnd, "", "Edit1", "^h")
$wnd = WinWait("Заменить")
$ctrl = ControlGetHandle($wnd, "", "Button6") ; кнопка "Отмена"

; -----------------------------------------------------------
_SendMessage($ctrl, $WM_LBUTTONDOWN) ; <= нажатие ЛКМ
Sleep(3000)  ; <= продолжительность удержания ЛКМ
_SendMessage($ctrl, $WM_LBUTTONUP) ; <= отпускание ЛКМ
; -----------------------------------------------------------

WinClose("[class:Notepad]")
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Фазинур [?]
Да и вообще, скрипт эмулирует НАВЕДЕНИЕ мыши, а мне надо зажатие.
Кажется из названия функции и ее аргументов должно быть интуитивно понятно, что происходит не только наведение.
 
Автор
Ф

Фазинур

Новичок
Сообщения
52
Репутация
0
Спасибо, сейчас попробую заинжектить



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

Все равно не получается
Код:
$hWnd = ControlGetHandle("окно", "" ,"id" )
_ControlClickEx( $hWnd, "left", 1, 30, 76 )
Opt("MouseClickDownDelay", 120)  
Func _ControlClickEx( $hWnd, $sButton = "left", $iClicks = 1, $iX = 0, $iY = 0, $iClickDownTime = 1000, $iClickDelay = 200 )
    Local $User32Dll = DllOpen( "user32.dll" ), $vButton, $Idx, $tPOINT, $pPOINT, $tagPOINT
    ; ---
    Switch $sButton
        Case "middle"
            $vButton = 0x04
        Case "right"
            $vButton = 0x02
        Case Else
            $vButton = 0x01
    EndSwitch
    If Not $iX And Not $iY Then
        $pPOINT = 0
    Else
        $tPOINT = DLLStructCreate( $tagPOINT )
            DLLStructSetData( $tPOINT, "X", $iX )
            DLLStructSetData( $tPOINT, "Y", $iY )

        $pPOINT = DllStructGetPtr( $tPOINT )
    EndIf
    ; ---
    DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWnd, "int", 0x02A1, "int", 0, "int", $pPOINT ) ;На счет wParam не уверен.
    For $Idx = 1 To $iClicks Step 1
        DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWnd, "int", 0x0100, "int", $vButton, "int", $pPOINT )
        If $iClickDownTime Then _
            Sleep( $iClickDownTime )

        DllCall( $User32Dll, "long", "PostMessage", "hwnd", $hWnd, "int", 0x0101, "int", $vButton, "int", $pPOINT )
        If $iClickDelay And $Idx < $iClicks Then _
            Sleep( $iClickDelay )
    Next
    ; ---
    DllClose( $User32Dll )
EndFunc



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

Может че то я не правильно написал
Код:
#include <SendMessage.au3>
#include <WindowsConstants.au3>
$ctrl = ControlGetHandle("Загловок окна", "", "")
_SendMessage($ctrl, $WM_LBUTTONDOWN) ; <= нажатие ЛКМ
Sleep(3000)  ; <= продолжительность удержания ЛКМ
_SendMessage($ctrl, $WM_LBUTTONUP) ; <= отпускание ЛКМ



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

А скрипт может нажать в флеш приложение ВК?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Фазинур [?]
Все равно не получается
Давайте по порядку.

Данная опция действует на функции Mouse*(). На ControlClick() - не действует.

;На счет wParam не уверен
В этой строчке нет необходимости.

Это сообщения для клавиш клавиатуры, а не мыши. Для ЛКМ будут WM_LBUTTONDOWN (0x0201) и WM_LBUTTONUP (0x0202). Попробовал ваш код с этими сообщениями на стандартных кнопках - работает. Полный перечень здесь http://autoit-script.ru/autoit3_docs/appendix/WinMsgCodes.htm

$ctrl = ControlGetHandle("Загловок окна", "", "")
Если вы не указываете конкретный контрол, то будет выбран элемент с фокусом ввода. Если такого нет, то, вероятно, будут проблемы.

нажать в флеш приложение
Сообщение с координатами, в принципе, можно отправить любому окну или элементу. А вот как этот элемент будет его обрабатывать - это уже разбираться надо (как обрабатывает флэш - я не знаю).
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
InnI
Уже и не помню если честно почему именно взял это сообщение, видно что сглупил. А на счет лишней строки - счел нужным для выполнения условия в той теме, хотя наверняка не уверен.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
А-а... так это ваш код... а я чего-то в ту тему даже не глянул...
Тогда так. Попробовал, firex, ваш код с этими сообщениями - работает. :beer:
 
Автор
Ф

Фазинур

Новичок
Сообщения
52
Репутация
0
Вот бы с UOpilot выдрать left и засунуть в авто ит


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

control id из флеша не выходит.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Фазинур [?]
засунуть в авто ит
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.



Если появится еще один ответ до исправления, то я закрою тему.
 
Статус
Закрыто для дальнейших ответов.
Верх