1 (изменено: slavafedora, 2017-02-12 19:52:42)

Тема: AHK: Пауза скрипта со сменой иконки в области уведомлений

Добрый день.
Имеется вот такой скрипт.
Суть такова, что при запуске скрипта ему задается иконка "pla.ico" - знак плэй.
После того как я нажимаю на Numpad8, задается пауза и меняется иконка на "paus.ico" -знак паузы.
При нажатии Nampad9, у меня перезагружается скрипт и иконка возвращается к стандартной которая указана в "голове" скрипта.
Есть одно но, когда я вручную задаю паузу скрипту в трее, "ПКМ - Pause Script". То иконка паузы там не ставится.
Кто знает как можно задать так, что и при ручном включении иконка тоже менялась?


Menu, Tray, Icon, pla.ico,1,1

Numpad8::
	{
		Menu, Tray, Icon, paus.ico,1,1
		Sleep, 10
		Pause, on
		Sleep, 10
		return
	}

Numpad9::
	{
		Reload
		return
	}

2

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Делать нестандартное меню в трее.

3 (изменено: Malcev, 2017-01-20 22:11:11)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Отлавливайте сообщения:

OnMessage(0x111,"WM_COMMAND")
return

WM_Command(wP)
{
   Static Suspend:=65305, Pause:=65306
   If (wP = Suspend and !A_IsSuspended and !A_IsPaused) or (wP = Pause and A_IsSuspended and A_IsPaused)
      Menu, Tray, Icon, Shell32.dll, 132, 1              ;  suspend
   Else If (wP = Suspend and !A_IsSuspended and A_IsPaused) or (wP = Pause and A_IsSuspended and !A_IsPaused)
      Menu, Tray, Icon, Shell32.dll, 110, 1              ;  suspend & paused
   Else If (wP = Suspend and A_IsSuspended and A_IsPaused) or (wP = Pause and !A_IsSuspended and !A_IsPaused)
      Menu, Tray, Icon, Shell32.dll, 116, 1              ;  paused
   Else If (wP = Suspend) or (wP = Pause)
      Menu, Tray, Icon, %A_AhkPath%                   ;  normal
}

4 (изменено: svoboden, 2017-01-20 22:45:49)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

#NoEnv

Menu, Tray, NoStandard
Menu, Tray, Icon, pla.ico,1,1
Menu, tray, tip, Программа запустилась
Menu, Tray, Add, &Пауза, Script
Menu, Tray, Default, &Пауза
Menu, Tray, Add, &Exit, asd
Menu, Tray, Click, 1
return
	
Numpad8::
	{
	        Menu, Tray, ToggleCheck, &Пауза
            Menu, Tray, Icon, paus.ico,1,1
		Pause
		return
	}

Numpad9::
	{
		Reload
		return
	}
	
Script:
Menu, Tray, ToggleCheck, &Пауза
Menu, Tray, Icon, Shell32.dll, 41, 1
Pause
Menu, Tray, Icon, Shell32.dll, 42, 1
return

asd:
ExitApp
return

5

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Ух, наворотили!

Menu, Tray, Icon, pla.ico,1,1
OnMessage(0x111, "WM_COMMAND")
Return

sc48:: PauseFunc()   ; Numpad8
sc49:: Reload        ; Numpad9

PauseFunc()  {
   Pause
   Menu, Tray, Icon, paus.ico,1,1
}

WM_COMMAND(wp)  {
   (wp = 65306 && PauseFunc())
}

Или так можно одной кнопкой Numpad8 переключать и паузу, и иконку:

Menu, Tray, Icon, pla.ico,1,1
OnMessage(0x111, "WM_COMMAND")
Return

sc48:: PauseFunc()   ; Numpad8

PauseFunc()  {
   static pause
   Pause, toggle, 1
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" : "pla.ico",1,1
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: slavafedora, 2017-02-12 17:35:28)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

teadrinker
Вот это то что и нужно было! Спасибо большое.

7 (изменено: svoboden, 2017-03-18 23:29:56)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

teadrinker, а вы знаете, как сделать, чтобы менялась иконка Suspend`а? Когда используешь свое меню. Желательно, чтобы изменения были только в метке. Спасибо!

8

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

svoboden, не совсем понял, что именно нужно, приведите пример в коде.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: svoboden, 2017-03-18 23:29:16)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

teadrinker, тоже самое, что и с паузой, только Suspend, чтобы менялась иконка Suspend, когда выбираешь ее вручную через трей.

10

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

IconNormal := ""   ; прописать путь в кавычках
IconSuspend := ""  ; прописать путь в кавычках

Menu, Tray, Icon, % IconNormal, 1, 1
OnMessage(0x111, Func("WM_COMMAND").Bind(IconNormal, IconSuspend))
Return

WM_COMMAND(IconNormal, IconSuspend, wp)  {
   static susp
   if (wp = 65305)
      Menu, Tray, Icon, % (susp := !susp) ? IconSuspend : IconNormal, 1, 1
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 (изменено: svoboden, 2017-02-10 02:54:50)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Ваш пример хороший только для обычного меню, не для своего. В примере ниже иконка меняется только один раз, а больше не меняется. Как сделать, чтобы менялась в обратном направлении тоже.
Пример:

#NoEnv

Menu, Tray, NoStandard
Menu, Tray, Icon, Shell32.dll, 46, 1
Menu, Tray, tip, Программа запустилась
Menu, Tray, Add, &Suspend, Script
Menu, Tray, Default, &Suspend
Menu, Tray, Add, &Exit, asd
Menu, Tray, Click, 1
return
	
vk31:: ; 1
SendInput asdf
return

Script:
Menu, Tray, ToggleCheck, &Suspend
Suspend
Menu, Tray, Icon, Shell32.dll, 41, 1
return

asd:
ExitApp
return

12

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Script:
Menu, Tray, ToggleCheck, &Suspend
Suspend
Menu, Tray, Icon, Shell32.dll, % (i := !i) ? 41 : 46, 1
return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Вот с таким вариантом, так и не понял как можно добавить функцию голосового оповещения.
Что при нажатии паузы он говорил "Пауза", при повторном нажатии продолжении скрипта "Запуск".

Menu, Tray, Icon, pla.ico,1,1
OnMessage(0x111, "WM_COMMAND")
Return

sc48:: PauseFunc()   ; Numpad8

PauseFunc()  {
   static pause
   Pause, toggle, 1
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" : "pla.ico",1,1
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}

Вот сам код:

Voice := ComObjCreate("SAPI.SpVoice") 
	Voice.Speak("Пауза")
Voice := ComObjCreate("SAPI.SpVoice") 
	Voice.Speak("Запуск")

14

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

global Voice := ComObjCreate("SAPI.SpVoice")
Menu, Tray, Icon, pla.ico,1,1
OnMessage(0x111, "WM_COMMAND")
Return

sc48:: PauseFunc()   ; Numpad8

PauseFunc()  {
   static pause, SVSFlagsAsync := 1
   Voice.Speak((pause := !pause) ? "pause" : "start", SVSFlagsAsync)
   Menu, Tray, Icon, % pause ? "paus.ico" : "pla.ico",1,1
   Pause, toggle, 1
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}

Или так:

Menu, Tray, Icon, pla.ico,1,1
OnMessage(0x111, "WM_COMMAND")
Return

sc48:: PauseFunc()   ; Numpad8

PauseFunc()  {
   static pause
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" : "pla.ico",1,1
   Pause, toggle, 1
   Voice := ComObjCreate("SAPI.SpVoice")
   Voice.Speak(pause ? "pause" : "start")
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}

С русским языком SAPI.SpVoice не работает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

С русским языком SAPI.SpVoice не работает.

На win8 и выше должен работать.
А на win7 так:
http://forum.script-coding.com/viewtopi … 69#p105469

16

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

teadrinker
Еще раз огромное спасибо! Взял второй вариант.
У меня Windows 8.1, с русским языком воспроизводит.
Но есть еще один не большой вопрос, как можно сделать тут исключение на то, когда включаешь паузу скрипта в ручную через трей, что-бы данный звук не воспроизводился. А только при нажатии sc48 (Num8)?

17

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Menu, Tray, Icon, pla.ico,1,1
OnMessage(0x111, "WM_COMMAND")
Return

sc48:: PauseFunc(true)   ; Numpad8

PauseFunc(speak = false)  {
   static pause
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" : "pla.ico",1,1
   Pause, toggle, 1
   if speak  {
      Voice := ComObjCreate("SAPI.SpVoice")
      Voice.Speak(pause ? "pause" : "start")
   }
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18 (изменено: slavafedora, 2017-02-12 17:36:13)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Имея данный скрипт:


^sc48:: PauseFunc(true)   ; Пауза/Запуск Ctrl + Numpad8

PauseFunc(speak = false)  {
   static pause
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" : "pla.ico",1,1
   Pause, toggle, 1
   if speak  {
   Voice := ComObjCreate("SAPI.SpVoice")
   Voice.Speak(pause ? "Пауза" : "Запуск")
   addChatMessageEx("FFD700", pause ? "{FFD700}Пауза" : "{FFD700}Запуск")
   }
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}

Кто может подсказать что бы при нажатии "паузы" как по клавише так и в трее в ручную когда я ставлю на паузу. У меня запускался скрипт, через данную функцию:


run, *runas D:\Гта\Ахк\Рабочие\Pause.ahk

А при нажатии запуска по клавише или так же через трей у меня просто завершало его процесс это функцией:


    ScriptFileName := "Pause.ahk"   ; название файла целевого скрипта
	SetTitleMatchMode, 2
	DetectHiddenWindows, On
	WinClose, % ScriptFileName " ahk_class AutoHotkey"

Все это аналогично смене иконки в данном скрипте. Пауза запускает скрипт, запуск завершает его процесс.
Подскажите пожалуйста.

19

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

slavafedora, добавьте недостающие точки в конце предложений.
http://forum.script-coding.com/viewtopi … 49#p108049
http://forum.script-coding.com/viewtopi … 01#p110801
http://forum.script-coding.com/viewtopi … 98#p111298
http://forum.script-coding.com/viewtopi … 21#p112021
http://forum.script-coding.com/viewtopi … 59#p112259
http://forum.script-coding.com/viewtopi … 62#p112262

20 (изменено: svoboden, 2017-02-14 18:49:59)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Думаю, так: "пишешь свои функции и добавляешь их сюда, Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" Add() : "pla.ico",1,1 Add1()".

21

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

ypppu
Исправил. Буду знать что и после смайлов тоже нужны.

22 (изменено: svoboden, 2017-02-12 22:13:33)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Так работает?:

^sc48:: PauseFunc(true)   ; Пауза/Запуск Ctrl + Numpad8

PauseFunc(speak = false)  {
   static pause
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" Add1() : "pla.ico" Add(),1,1
   Pause, toggle, 1
   if speak  {
   Voice := ComObjCreate("SAPI.SpVoice")
   Voice.Speak(pause ? "Пауза" : "Запуск")
   addChatMessageEx("FFD700", pause ? "{FFD700}Пауза" : "{FFD700}Запуск")
   }
   Return true
   }

WM_COMMAND(wp)  {
   if (wp = 65306)
   Return PauseFunc()
   }

Add() {
    ScriptFileName := "rty.ahk"
    SetTitleMatchMode, 2
    DetectHiddenWindows, On
    WinClose, % ScriptFileName " ahk_class AutoHotkey"
    }
   Return

Add1() {
    run, *runas D:\Гта\Ахк\Рабочие\Pause.ahk
    }
   Return

23

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

svoboden
Работает, то что нужно! Спасибо.

24 (изменено: slavafedora, 2017-04-28 17:41:08)

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

И снова подниму данный вопрос, так как появился новый вопрос.
Уже обдумал всё что можно, не могу найти правильное решение, прошу Вашей помощи.

В общем, использую данную функцию в скрипте, что-бы ставить его на паузу и продолжать его работы(снять с паузы):


^sc48::
Funck()
{
	PauseFunc(true) ; Пауза/Запуск Ctrl + Numpad8
}
return

PauseFunc(speak = false)  
{
   static pause
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" Add1() : "pla.ico" Add(),1,1
   Pause, toggle, 1
   if speak  
   {
	   Voice := ComObjCreate("SAPI.SpVoice")
	   Voice.Speak(pause ? "Пауза" : "Запуск")
	   addChatMessageEx("FFD700", pause ? "{FFD700}Пауза" : "{FFD700}Запуск")
   }
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}

Add()
{
    ScriptFileName := "Pause.ahk"
    SetTitleMatchMode, 2
    DetectHiddenWindows, On
    WinClose, % ScriptFileName " ahk_class AutoHotkey"
	return
}

Add1()
{
    run, *runas D:\Гта\Ахк\Рабочие\Pause.ahk
	return
}

Добавил в этот же скрипт ожидание активности пользователя и по истечению определенного времени, возможность использования данной функции постановки скрипта на паузу. Проще говоря, когда забыл отключить и ушел по своим делать, что бы в течении 1 минуты скрипт сам поставил себя на паузу.
Но что-то работает не так когда использую Funck(). Функция начинает просто бушевать и криво работать.


If (A_TimeIdlePhysical > 60 * 1000){
		Funck()
		return
	}

25

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

Может просто возможно добавить данный счетчик прямо в функцию паузы.

26

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

А зачем вообще нужна эта функция Funck()? Почему по горячей клавише нельзя сразу вызвать PauseFunc()?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

27

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

teadrinker
Потому-что я пытаюсь добавить не по горячей клавише, а по таймеру. Где будет переход на метку, но он там не работает. Поэтому сделал через функцию.
PauseFunc() так же работает некорректно, иконка в области с оповещениями начинает перемешиваться и выдавать разный результат. Я так и не понял в чем проблема.

28

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

slavafedora пишет:

Потому-что я пытаюсь добавить не по горячей клавише, а по таймеру.

Всё равно непонятно, зачем нужна дополнительная функция. По таймеру сразу и вызывайте PauseFunc().

slavafedora пишет:

PauseFunc() так же работает некорректно

Ну я уж не знаю, у вас там ещё какие-то функции, которые непонятно что делают.
Вот так поставит на паузу сам себя через 5 секунд:

Menu, Tray, Icon, pla.ico,1,1
OnMessage(0x111, "WM_COMMAND")
SetTimer, TimeIdle
Return

TimeIdle:
   if A_TimeIdle > 5000
      PauseFunc(true)
   Return

sc48:: PauseFunc(true)   ; Numpad8

PauseFunc(speak = false)  {
   static pause
   Menu, Tray, Icon, % (pause := !pause) ? "paus.ico" : "pla.ico",1,1
   Pause, toggle, 1
   if speak  {
      Voice := ComObjCreate("SAPI.SpVoice")
      Voice.Speak(pause ? "pause" : "start")
   }
   Return true
}

WM_COMMAND(wp)  {
   if (wp = 65306)
      Return PauseFunc()
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

29

Re: AHK: Пауза скрипта со сменой иконки в области уведомлений

teadrinker пишет:

Вот так поставит на паузу сам себя через 5 секунд:

Интересно, но данный способ подошел. Благодарю за помощь.