1

Тема: AHK: Вложенные скрипты со вложенным меню

Не уверен, существует ли возможность автоматически вкладывать трей-меню одного скрипта в другой, но если это возможно, пожалуйста, подскажите метод, как вложить первый сценарий так, чтобы его меню вместе с иконками отображалось во втором скрипте ярусом выше. Не знаю, ясно ли я выразился, но цель заключается в том, чтобы вложенные сценарии отображались в т.ч. и в трей-меню. Если представить меню визуально, то должно получиться примерно следующее:

Работа первого скрипта:                           
https://i.gyazo.com/256ce2f6fdf547cb10d9a8c24e45597a.gif


Работа второго скрипта:
https://i.gyazo.com/39a0ab5f1396bbbd257eb66123aab2c6.gif



Пример кода для первого скрипта:


Menu, Tray, NoStandard
Menu, Tray, Tip, First Script
Menu, Tray, Icon, %A_ScriptDir%\1.ico,, 16

Menu, Tray, Add, Exit, End
Menu, Tray, Icon, Exit, %A_ScriptDir%\1.ico

End::
ExitApp

Чтобы визуализировать работу второго скрипта, я набрал следующее:

SetTitleMatchMode, 2
DetectHiddenWindows, On

Menu, Tray, NoStandard
Menu, Tray, Tip, Second Script
Menu, Tray, Icon, %A_ScriptDir%\2.ico

Menu, Sub, Add, Exit, End
Menu, Sub, Icon, Exit, %A_ScriptDir%\1.ico

Menu, Tray, Add, First Script, :Sub
Menu, Tray, Icon, First Script, %A_ScriptDir%\1.ico

End:: WinClose, 1.ahk - AutoHotkey v

Но такой вариант не подходит, т.к. необходима реализация эффекта вложения для скриптов, с большим количеством пунктов меню. Здесь для закрытия первого скрипта параметр Include не применялся, т.к . я пока не знаю, как его использовать должным образом. Только визуализировал выполнение команды.

2

Re: AHK: Вложенные скрипты со вложенным меню

OFF: Вообще на форуме предлагались готовые менеджеры скриптов...

Можно разделить скрипты на 2 вида: мастер-скрипт и все остальные (просто скрипты).
В простых скриптах создавать скрытое окно, в котором продублированы пункты трей-меню и текущая иконка.
Мастер-скрипт при запуске находит все окна с нужным классом и считывает их содержимое. На основании полученных данных составляет своё трей-меню.

3

Re: AHK: Вложенные скрипты со вложенным меню

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

Если же подобное реализовать никак нельзя, то, пожалуйста, предложите метод использования функции Menu, Tray для вложенных в текущий скрипт других скриптов. Иными словами, измените второй скрипт из первого поста методом, основанным на вложенных скриптах.

Ваше предложение со скрытыми окнами я, к сожалению, не понял. Если Вы о пользовательском интерфейсе, то меня больше интересует трей-меню.

4

Re: AHK: Вложенные скрипты со вложенным меню

Что-то мой способ слишком костыльный. Наверное кто-нибудь знает лучший вариант обмена данными между скриптами.

5 (изменено: serzh82saratov, 2015-11-17 14:51:09)

Re: AHK: Вложенные скрипты со вложенным меню

Самое простое из пункта второго скрипта, просто показывать (то есть вызывать) непосредственно само меню первого.
Содержимое второго скрипта:


SetTitleMatchMode, 1
DetectHiddenWindows, On

FirstScriptPath =   ; путь к файлу First Script

Menu, Tray, NoStandard
Menu, Tray, Tip, Second Script
Menu, Tray, Icon, %A_ScriptDir%\2.ico
  
Menu, Tray, Add, First Script >, View
Menu, Tray, Icon, First Script >, %A_ScriptDir%\1.ico

End:: WinClose, 1.ahk - AutoHotkey v

View:
	WinExist(FirstScriptPath " ahk_class AutoHotkey ahk_exe AutoHotkey.exe")
	SendMessage, 0x404, 0, 0x205   ; AHK_NOTIFYICON = 0x404, WM_RBUTTONUP = 0x205
	Return

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: Вложенные скрипты со вложенным меню

Пожалуй, эта тема для меня будет сложной. В таком случае, подскажите, пожалуйста, как в трей-меню добавить пункт на выполнение команды из вложенного скрипта? Тогда только скрипт-агрегатор будет содержать в себе трей-меню, который я и буду редактировать под каждое изменение во вкладываемых скриптах.

7

Re: AHK: Вложенные скрипты со вложенным меню

ypppu предложил концепцию костыля, правда не уточнил что делать при выборе пункта

Принцип действия моего костыля таков:
1.1 Создаём скрипт с меню в трее. Пункты меню в трее ссылаются на какие-то свои подпрограммы.
1.2 В этом же скрипте создаём скрытое GUI, в котором какими-нибудь эл. упр. (например кнопками) дублируются пункты трей-меню и ссылаются на те же подпрограммы, что и пункты трей-меню.

2.1 Создаём мастер-скрипт, который при запуске обнаруживает все работающие скрипты. Он считывает эл.упр. из их GUI и по полученным данным создаёт собственное меню в трее. При нажатии на пункты его трей-меню, происходит отправка ControlClick в эл.упр. скрытых окон скриптов.

Пример дублирования эл. упр.

Menu, tray, NoStandard
Menu, tray, add, Item1

GUI, Add, Button, vMyButton1 gItem1, Item1
GUI, Show
Return

Item1:
SoundBeep
Return

8 (изменено: serzh82saratov, 2015-11-17 16:13:46)

Re: AHK: Вложенные скрипты со вложенным меню

becauseim пишет:

Тогда только скрипт-агрегатор будет содержать в себе трей-меню, который я и буду редактировать под каждое изменение во вкладываемых скриптах.

Ну тогда можно так:


#Persistent
#SingleInstance Force

Menu, Tray, Tip, First Script
Menu, Tray, Icon, %A_ScriptDir%\1.ico,, 16
Gui, Add, Edit, gActions vAction
Gui, Show, Hide, First Script Hidden Gui
Return

Actions:
	GuiControlGet, Command, , Action
	Try GoSub, %Command%
	Return
	
ExitApp:
	ExitApp 

#Persistent
#SingleInstance Force

SetTitleMatchMode, 3
DetectHiddenWindows, On

Menu, Tray, NoStandard
Menu, Tray, Tip, Second Script
Menu, Tray, Icon, %A_ScriptDir%\2.ico

Menu, Sub, Add, Exit, FirstExit
Menu, Sub, Icon, Exit, %A_ScriptDir%\1.ico

Menu, Tray, Add, First Script, :Sub
Menu, Tray, Icon, First Script, %A_ScriptDir%\1.ico
Return

FirstExit: 
	ControlSetText, Edit1, ExitApp, First Script Hidden Gui ahk_class AutoHotkeyGUI ahk_exe AutoHotkey.exe 
	Return

Пример с сообщениями приводить не буду, он сложнее, а тут всё очень просто "стандартными" командами.
Используем свойство контрола Edit переходить по метке при изменении текста.
(изменено: serzh82saratov, Сегодня 16:12:28) попраил опечатку.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Вложенные скрипты со вложенным меню

serzh82saratov, не понял Вашего замысла, т.е. не понял, где в данном случае скрипт-агрегатор с меню, а где скрипт, содержащий в себе только команды, т.к. здесь параметр Menu, Tray используется в обоих случаях. Если это все-таки то, что мне нужно, то чтобы было понятнее, отредактируйте, пожалуйста, последний код, основываясь, например, на следующем:

Empty Recycle Bin & Clear Recent List.ahk:

#Del::
	FileRecycleEmpty
	return

^#Del::
	DllCall("shell32.dll\SHAddToRecentDocs", str, "SHARD_PATH", int, 0)
	return

Agregator.ahk:


SetWorkingDir %A_ScriptDir%
#Include, Empty Recycle Bin & Clear Recent List.ahk
Menu, Tray, Add, Recycle Bin, ; (здесь должна быть ссылка на горячую клавишу #Del из вложенного скрипта)

OFF: Смежная тема. Хоть это и не подразумевает взаимодействия с меню, но все же интересен принцип работы следующего скрипта. Из описания я ничего не понял даже после его перевода. Объясните, пожалуйста, принцип работы AutoInclude.ahk и как им пользоваться.

10

Re: AHK: Вложенные скрипты со вложенным меню

Вы их запускали?
Они просто работают как на гифке из первого поста.

где скрипт, содержащий в себе только команды

Первый код.

где в данном случае скрипт-агрегатор с меню

Второй код.

Menu, Tray используется в обоих случаях.

Ну и что тут? Подсказка и иконка как на гифке.

Menu, Tray, Tip, First Script
Menu, Tray, Icon, %A_ScriptDir%\1.ico,, 16

не понял Вашего замысла,

Всё очень просто, из второго посылаем в первый имя подпрограммы которую в нём надо выполнить. В первом далее просто создаём любые подпрограммы. Из второго просто посылаем их названия.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11 (изменено: serzh82saratov, 2015-11-18 18:58:16)

Re: AHK: Вложенные скрипты со вложенным меню

becauseim пишет:

Если это все-таки то, что мне нужно, то чтобы было понятнее, отредактируйте, пожалуйста, последний код, основываясь, например, на следующем:


#Persistent
#SingleInstance Force

Menu, Tray, Tip, First Script
Menu, Tray, Icon, %A_ScriptDir%\1.ico,, 16
Gui, Add, Edit, gActions vAction
Gui, Show, Hide, First Script Hidden Gui
Return

Actions:
	GuiControlGet, Command, , Action
	Try GoSub, %Command%
	Return
	
ExitApp:
	ExitApp  
	
#Del::
	MsgBox FileRecycleEmpty
	return

^#Del::
	MsgBox DllCall("shell32.dll\SHAddToRecentDocs", str, "SHARD_PATH", int, 0)
	return

#Persistent
#SingleInstance Force

SetTitleMatchMode, 3
DetectHiddenWindows, On

Menu, Tray, NoStandard
Menu, Tray, Tip, Second Script
Menu, Tray, Icon, %A_ScriptDir%\2.ico

Menu, Sub, Add, ExitApp, ExitAppFirst 
Menu, Sub, Add, Empty Recycle Bin, Del1
Menu, Sub, Add, Clear Recent List, Del2
Menu, Sub, Icon, ExitApp, %A_ScriptDir%\1.ico

Menu, Tray, Add, First Script, :Sub
Menu, Tray, Icon, First Script, %A_ScriptDir%\1.ico
Return

ExitAppFirst:  
	ControlSetText, Edit1, ExitApp, First Script Hidden Gui ahk_class AutoHotkeyGUI ahk_exe AutoHotkey.exe 
	Return 
	
Del1: 
	ControlSetText, Edit1, #Del, First Script Hidden Gui ahk_class AutoHotkeyGUI ahk_exe AutoHotkey.exe 
	Return 

Del2: 
	ControlSetText, Edit1, ^#Del, First Script Hidden Gui ahk_class AutoHotkeyGUI ahk_exe AutoHotkey.exe 
	Return 
+ Второй можно сократить, если имена пунктов в его меню соответствуют именам меток, или горячим клавишам в первом

SetTitleMatchMode, 3
DetectHiddenWindows, On

Menu, Tray, NoStandard
Menu, Tray, Tip, Second Script
Menu, Tray, Icon, %A_ScriptDir%\2.ico

Menu, Sub, Add, ExitApp, SendFirst 
Menu, Sub, Add, #Del, SendFirst
Menu, Sub, Add, ^#Del, SendFirst
Menu, Sub, Icon, ExitApp, %A_ScriptDir%\1.ico

Menu, Tray, Add, First Script, :Sub
Menu, Tray, Icon, First Script, %A_ScriptDir%\1.ico
Return

SendFirst:  
	ControlSetText, Edit1, % A_ThisMenuItem, First Script Hidden Gui ahk_class AutoHotkeyGUI ahk_exe AutoHotkey.exe 
	Return  
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui