Что нового

Помогите остановить функию в любое время

zelich

Новичок
Сообщения
149
Репутация
0
Есть скрипт:

Код:
#include <GuiConstants.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
TraySetToolTip('Export')

HotKeySet('+{Esc}', '_Exit')

HotKeySet('{F2}', '_Export')
HotKeySet('+{F2}', 'Where')
MsgBox(4096, "Export", "F2  ====> экспорт изображения", 2)

While 1
    Sleep(10)
WEnd

Func Where()
    $aMousePos = MouseGetPos()
    $zX = $aMousePos[0]
    $zY = $aMousePos[1]
   MsgBox(4096, "ТОЛЬКО КООРД", $zX & ", " & $zY, 1)
EndFunc

Func _Export()
   Beep(200,150)
   MouseMove(20, 35)
   MouseClick('LEFT')
   MouseMove(130, 320)
   MouseClick('LEFT')
   Sleep (450);
   MouseMove(270, 455)
   Sleep (1200);
   MouseMove(390, 305)
   Sleep (500);
   MouseMove(500, 350)
   MouseClick('LEFT')
EndFunc

Func _Exit()
    Exit
 EndFunc


Помогите пожалуйста доделать, чтоб, например, по нажатию того-же F2, функция _Export() останавливалась

- - - - -

Глупо же 8-ь раз ставить условие If...
 
Последнее редактирование:

IMStrelcov

CTPEJIbLLOB
Сообщения
253
Репутация
64
Код:
#include <GuiConstants.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
TraySetToolTip('Export')

Global $bPause = False, $bRun = False

HotKeySet('+{Esc}', '_Exit')

HotKeySet('{F2}', '_Export')
HotKeySet('+{F2}', 'Where')
MsgBox(4096, "Export", "F2  ====> экспорт изображения", 2)

While 1
   Sleep(10)
WEnd

Func Where()
   $aMousePos = MouseGetPos()
   $zX = $aMousePos[0]
   $zY = $aMousePos[1]
   MsgBox(4096, "ТОЛЬКО КООРД", $zX & ", " & $zY, 1)
EndFunc

Func _Export()
   If $bRun Then
      $bPause = Not $bPause
   Else
      $bRun = True
      Beep(200,150)
      MouseMove(20, 35)
      MouseClick('LEFT')
      MouseMove(130, 320)
      MouseClick('LEFT')
      Sleep (450);
      Pause_()
      MouseMove(270, 455)
      Sleep (1200);
      Pause_()
      MouseMove(390, 305)
      Sleep (500);
      Pause_()
      MouseMove(500, 350)
      MouseClick('LEFT')
      $bRun = False
   EndIf
EndFunc

Func _Exit()
   Exit
EndFunc

Func Pause_()
   While $bPause
      Sleep(100)
   WEnd
EndFunc
 
Автор
zelich

zelich

Новичок
Сообщения
149
Репутация
0
Код:
#include <GuiConstants.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
TraySetToolTip('Export')

Global $bPause = False, $bRun = False

HotKeySet('+{Esc}', '_Exit')

HotKeySet('{F2}', '_Export')
HotKeySet('+{F2}', 'Where')
MsgBox(4096, "Export", "F2  ====> экспорт изображения", 2)

While 1
   Sleep(10)
WEnd

Func Where()
   $aMousePos = MouseGetPos()
   $zX = $aMousePos[0]
   $zY = $aMousePos[1]
   MsgBox(4096, "ТОЛЬКО КООРД", $zX & ", " & $zY, 1)
EndFunc

Func _Export()
   If $bRun Then
      $bPause = Not $bPause
   Else
      $bRun = True
      Beep(200,150)
      MouseMove(20, 35)
      MouseClick('LEFT')
      MouseMove(130, 320)
      MouseClick('LEFT')
      Sleep (450);
      Pause_()
      MouseMove(270, 455)
      Sleep (1200);
      Pause_()
      MouseMove(390, 305)
      Sleep (500);
      Pause_()
      MouseMove(500, 350)
      MouseClick('LEFT')
      $bRun = False
   EndIf
EndFunc

Func _Exit()
   Exit
EndFunc

Func Pause_()
   While $bPause
      Sleep(100)
   WEnd
EndFunc
Это не совсем то.
Пауза- это не остановка... Потом при повторном нажатие F2 функция продолжается, а не заново.

Сделал с If
 

xXx

╚{■_■}╗
Меценат
Сообщения
248
Репутация
95
Код:
Global $bFlag = False
HotKeySet('{F2}', '_Push')

While Sleep(100)
    If $bFlag Then _Export()
WEnd

Func _Push()
    $bFlag = Not $bFlag
EndFunc

Func _Export()
    Beep(200, 150)
    MouseMove(20, 35)
    MouseClick('LEFT')
    If Not $bFlag Then Return
    MouseMove(130, 320)
    MouseClick('LEFT')
    Sleep(450)
    If Not $bFlag Then Return
    MouseMove(270, 455)
    Sleep(1200)
    If Not $bFlag Then Return
    MouseMove(390, 305)
    Sleep(500)
    If Not $bFlag Then Return
    MouseMove(500, 350)
    MouseClick('LEFT')
    $bFlag = False
EndFunc   ;==>_Export
 
Последнее редактирование:

Mirag

Новичок
Сообщения
11
Репутация
3
Код:
#include <GuiConstants.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
TraySetToolTip('Export')

HotKeySet('+{Esc}', '_Exit')

HotKeySet('{F2}', '_Export')
HotKeySet('+{F2}', 'Where')

$a = 0
MsgBox(4096, "Export", "F2  ====> экспорт изображения", 2)

While 1
    Sleep(10)
WEnd

Func Where()
    $aMousePos = MouseGetPos()
    $zX = $aMousePos[0]
    $zY = $aMousePos[1]
   MsgBox(4096, "ТОЛЬКО КООРД", $zX & ", " & $zY, 1)
EndFunc

Func _Export()
   If $a = 1 then 
      $a = 0
      Return
   Endif
   $a = 1
   Beep(200,150)
   MouseMove(20, 35)
   MouseClick('LEFT')
   MouseMove(130, 320)
   MouseClick('LEFT')
   Sleep (450);
   MouseMove(270, 455)
   Sleep (1200);
   MouseMove(390, 305)
   Sleep (500);
   MouseMove(500, 350)
   MouseClick('LEFT')
EndFunc

Func _Exit()
    Exit
 EndFunc
 
Последнее редактирование:
Автор
zelich

zelich

Новичок
Сообщения
149
Репутация
0
Опять-же– нет, в таком варианте If заканчивает выполнение и только после этого "останавливается".

Пока нашел только такой способ:
Код:
Func _Export2() 
   Beep(200,150)
   $st = Not $st
   If $st = 0 Then
      MouseMove(20, 35)
      MouseClick('LEFT')
   EndIf
   If $st = 0 Then
      MouseMove(130, 320)
      MouseClick('LEFT')
      Sleep (850);
   EndIf
   If $st = 0 Then
      MouseMove(270, 455)
      Sleep (1200);
   EndIf
   If $st = 0 Then
      MouseMove(390, 305)
      Sleep (500);
   EndIf
   If $st = 0 Then
      MouseMove(500, 350)
      MouseClick('LEFT')
   EndIf
   $st = 1
EndFunc
 

vivernet

Знающий
Сообщения
32
Репутация
5
Есть скрипт:

Код:
#include <GuiConstants.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
TraySetToolTip('Export')

HotKeySet('+{Esc}', '_Exit')

HotKeySet('{F2}', '_Export')
HotKeySet('+{F2}', 'Where')
MsgBox(4096, "Export", "F2  ====> экспорт изображения", 2)

While 1
    Sleep(10)
WEnd

Func Where()
    $aMousePos = MouseGetPos()
    $zX = $aMousePos[0]
    $zY = $aMousePos[1]
   MsgBox(4096, "ТОЛЬКО КООРД", $zX & ", " & $zY, 1)
EndFunc

Func _Export()
   Beep(200,150)
   MouseMove(20, 35)
   MouseClick('LEFT')
   MouseMove(130, 320)
   MouseClick('LEFT')
   Sleep (450);
   MouseMove(270, 455)
   Sleep (1200);
   MouseMove(390, 305)
   Sleep (500);
   MouseMove(500, 350)
   MouseClick('LEFT')
EndFunc

Func _Exit()
    Exit
 EndFunc


Помогите пожалуйста доделать, чтоб, например, по нажатию того-же F2, функция _Export() останавливалась

- - - - -

Глупо же 8-ь раз ставить условие If...
Я у себя такое делаю с помощью своей функции Sleep
Код:
Func _Sleep($time)
    Local $_Timer = TimerInit
    While True
        If TimerDiff($_Timer) > $time Then Return True
        If Not $g_isRunning Then Return False
        Sleep(10)
    WEnd
EndFunc


А во всех местах кода, где есть пауза:
Код:
If Not _Sleep(1000) Then Return

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

Соответственно кнопками Старт и Стоп, меняется значение у: $g_isRunning
Сообщение автоматически объединено:

По факту у меня в этой функции еще много чего, так как удобно в нее засунуть что то, что нужно регулярно проверять.
 

Mirag

Новичок
Сообщения
11
Репутация
3
Опять-же– нет, в таком варианте If заканчивает выполнение и только после этого "останавливается".

Пока нашел только такой способ:
Код:
Func _Export2()
   Beep(200,150)
   $st = Not $st
   If $st = 0 Then
      MouseMove(20, 35)
      MouseClick('LEFT')
   EndIf
   If $st = 0 Then
      MouseMove(130, 320)
      MouseClick('LEFT')
      Sleep (850);
   EndIf
   If $st = 0 Then
      MouseMove(270, 455)
      Sleep (1200);
   EndIf
   If $st = 0 Then
      MouseMove(390, 305)
      Sleep (500);
   EndIf
   If $st = 0 Then
      MouseMove(500, 350)
      MouseClick('LEFT')
   EndIf
   $st = 1
EndFunc
Поясните, пожалуйста, поподробнее, что значит "if заканчивает..."? В первом сообщении была задача запускать и останавливать функцию нажатием F2. Если не получается остановить, то в 12 строке добавьте Global для переменной $a. Скорее всего, ее изменения в функции алгоритм игнорирует
 
Верх