Что нового

[Мышь, клавиатура] как добавить второе условие условие скрипту?

zmiter25

Новичок
Сообщения
5
Репутация
0
Версия AutoIt: 3.3.14.2

Описание: всем привет! пытаюсь сделать скрипт с двумя условиями, 1: если совпадает цвет пикселя (PixelSearch), 2: если зажата клавиша (_IsPressed), то нажать левый клик мыши. по отдельности оба работают нормально. но при попытки их соединить в один выдает ошибку.
Код:
HotKeySet("{F6}","_Exit")
While 1
$Variable = PixelSearch(959,539,960,540,0xFEB133)
If IsArray($Variable) = True Then
MouseClick("LEFT")
Sleep (100)
EndIf
WEnd
Func _Exit()
Exit
EndFunc


и второй
Код:
#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

While 1
    If _IsPressed("11", $hDLL) Then
        ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
        ; Wait until key is released.
        While _IsPressed("11", $hDLL)
            Sleep(100)
			MouseClick("LEFT")
        WEnd
        ConsoleWrite("_IsPressed - Shift Key was released." & @CRLF)
    ElseIf _IsPressed("1B", $hDLL) Then
        MsgBox($MB_SYSTEMMODAL, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.")
        ExitLoop
    EndIf
    Sleep(100)
WEnd

DllClose($hDLL)


Примечания: на сколько я понимаю они должны работать как на картинке? буду признателен за помощь.
соеденить пытался примерно так
Код:
#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

While 1
    If _IsPressed("11", $hDLL) Then
        ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
        ; Wait until key is released.
        While _IsPressed("11", $hDLL)
			$Variable = PixelSearch(959,539,960,540,0xFEB133)
			If IsArray($Variable) = True Then
            Sleep(100)
			MouseClick("LEFT")
        WEnd
        ConsoleWrite("_IsPressed - Shift Key was released." & @CRLF)
    ElseIf _IsPressed("1B", $hDLL) Then
        MsgBox($MB_SYSTEMMODAL, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.")
        ExitLoop
    EndIf
    Sleep(250)
WEnd

DllClose($hDLL)

в данном случае выдает ошибку
Line 507 (File " "):
Error: "Wend" statement with no matching "While" statement.
 

Вложения

  • схема.png
    схема.png
    21.7 КБ · Просмотры: 10
Автор
Z

zmiter25

Новичок
Сообщения
5
Репутация
0
нашел команду "And", начало работать
Код:
#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

While 1
$Variable = PixelSearch(959,539,960,540,0xFEB133)
    If IsArray($Variable) = True And _IsPressed("11", $hDLL) Then
        ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
        ; Wait until key is released.
        While _IsPressed("11", $hDLL)
		Sleep(100)
		MouseClick("LEFT")
        WEnd
        ConsoleWrite("_IsPressed - Shift Key was released." & @CRLF)
    ElseIf _IsPressed("1B", $hDLL) Then
        MsgBox($MB_SYSTEMMODAL, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.")
        ExitLoop
    EndIf
    Sleep(250)
WEnd

DllClose($hDLL)
[/spoiler] но клики не прекращаются пока не отпустишь кнопку, не смотря на цвет. как это исправить?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
в третьем коде из первого сообщения
Код:
If IsArray($Variable) = True Then
            Sleep(100)
            MouseClick("LEFT")

не хватает
Код:
EndIf


Постоянный клик в последнем примере потому, что установлен цикл слежения за нажатием
Код:
While _IsPressed("11", $hDLL)
      Sleep(100)
      MouseClick("LEFT")
        WEnd
 
Автор
Z

zmiter25

Новичок
Сообщения
5
Репутация
0
Спасибо! Добавил, все начало работать!
Код:
#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

While 1
    If _IsPressed("11", $hDLL) Then
        ConsoleWrite("_IsPressed - Shift Key was pressed." & @CRLF)
        ; Wait until key is released.
        While _IsPressed("11", $hDLL)
            $Variable = PixelSearch(959,539,960,540,0xFEB133)
            If IsArray($Variable) = True Then
            Sleep(100)
            MouseClick("LEFT")
			EndIf
        WEnd
        ConsoleWrite("_IsPressed - Shift Key was released." & @CRLF)
    ElseIf _IsPressed("1B", $hDLL) Then
        MsgBox($MB_SYSTEMMODAL, "_IsPressed", "The Esc Key was pressed, therefore we will close the application.")
        ExitLoop
    EndIf
    Sleep(250)
WEnd

DllClose($hDLL)
[quote]
joiner сказал(а):
в третьем коде из первого сообщения
не хватает
Код:
EndIf
и на этом как бы можно и закончить. но хочется понять, что именно отвечает за цикл слежения. убираю
Код:
While _IsPressed("11", $hDLL)
ошибка. убираю WEnd
Код:
While _IsPressed("11", $hDLL)
      Sleep(100)
      MouseClick("LEFT") 
        WEnd ;убираю эту строку
ошибка


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

УРА!!! кажется стабильно работает! :laugh: если нажата клавиша "23" (END), то проверяем цвет в квадрате по координатам, если совпадает то жмем левый клик мыши.
Код:
#include <Misc.au3>
#include <MsgBoxConstants.au3>

Local $hDLL = DllOpen("user32.dll")

While 1
If _IsPressed("23", $hDLL) Then
		While _IsPressed("23", $hDLL)
            $Variable = PixelSearch(958,538,961,541,0xFEB133)
            If IsArray($Variable) = True Then
            MouseClick("LEFT")
            EndIf
		WEnd
EndIf
WEnd
DllClose($hDLL)
[quote]

ни где нет ни чего лишнего или неправильно на писаного?
 
Верх