Что нового

[Элементы GUI] Остановка и запуск функции при клике по меню в трее

antisept

Новичок
Сообщения
6
Репутация
0
Здравствуйте! Буквально, несколько дней назад начал изучать AutoIt. Пытаюсь написать простую программу, которая будет нажимать ctrl+s в блокноте, каждую минуту. С самой функцией я разобрался и с меню в трее - тоже. Подскажите, как остановить эту функцию и запустить ее снова из трея. Заранее, спасибо!

Код:
WinWaitActive("Безымянный - Блокнот")

AdlibRegister('save', 1*60*1000)
Func save()
Send ("^s")
EndFunc

#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1)   ; Default tray menu items (Script Paused/Exit) will not be shown.


TrayCreateItem("")
$aboutitem      = TrayCreateItem("Пауза")
TrayCreateItem("")
$startprog      = TrayCreateItem("Старт")
TrayCreateItem("")
$exititem       = TrayCreateItem("Выход")

TraySetState()

While 1
    $msg = TrayGetMsg()
    Select
        Case $msg = $aboutitem
            ...........
			Case $msg = $startprog
            ...........
        Case $msg = $exititem
            ExitLoop
    EndSelect
WEnd

Exit
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


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

antisept

Новичок
Сообщения
6
Репутация
0
Почитал форум и немного переделал скрипт, т.к., предыдущий отказывался работать:

Код:
WinWaitActive("Безымянный — Блокнот")
While 1
_SendExEx("^s")
Sleep(60000)
WEnd
Func _SendExEx($sKeys, $iFlag=0)
    If @KBLayout = 0419 Then
        Local $sANSI_Chars = "ёйцукенгшщзхъфывапролджэячсмитьбю.?"
        Local $sASCII_Chars = "`qwertyuiop[]asdfghjkl;'zxcvbnm,./&"

        Local $aSplit_Keys = StringSplit($sKeys, "")
        Local $sKey
        $sKeys = ""

        For $i = 1 To $aSplit_Keys[0]
            $sKey = StringMid($sANSI_Chars, StringInStr($sASCII_Chars, $aSplit_Keys[$i]), 1)

            If $sKey <> "" Then
                $sKeys &= $sKey
            Else
                $sKeys &= $aSplit_Keys[$i]
            EndIf
        Next
    EndIf

    Return Send($sKeys, $iFlag)
EndFunc


#Include <Constants.au3>
#NoTrayIcon

Opt("TrayMenuMode",1)   ; Default tray menu items (Script Paused/Exit) will not be shown.


TrayCreateItem("")
$aboutitem      = TrayCreateItem("Пауза")
TrayCreateItem("")
$startprog      = TrayCreateItem("Старт")
TrayCreateItem("")
$exititem       = TrayCreateItem("Выход")

TraySetState()

While 1
    $msg = TrayGetMsg()
    Select
        Case $msg = $aboutitem
            ...........
            Case $msg = $startprog
            ...........
        Case $msg = $exititem
            ExitLoop
    EndSelect
WEnd

Exit
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
antisept
Не удивлюсь что и этот скрипт не создаст меню в трее. Он входит в цикл и крутит его до бесконечности, всё что после него просто не будет воспроизводится никогда.

Что будет если блокнот закрыт или потеряет фокус? Высылать Ctrl+S другой программе? Нужно перед высылкой Ctrl+S проверять заголовок активного окна.
 
Автор
A

antisept

Новичок
Сообщения
6
Репутация
0
AZJIO, спасибо! Т.е. так?:
Код:
If WinActive("Безымянный...") Then Здесь цикл Endif
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Я что-то не пойму...
А вот такая менюшка только у меня бывает?
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
C2H5OH
Она у всех. Если вы про паузу, то мигание раздражает, не хотелось бы чтобы в трее постоянно мигала иконка. Лучше своё меню сделать.

antisept
Пример в справке в HotKeySet содержит пример паузы.
Ещё вопрос, как действовать высылке если нажаты другие клавиши? Я так понимаю кто-то будет печатать и при этом вызывается Ctrl+S, и что будет? Рандомный вызов случайного сочетания клавиш? Нужно проверять зажатие клавиш или блокировать клавиатуру используя BlockInput, но опять же не решение, при вводе символы будут пропадать.
 
Верх