1 (изменено: miguel99, 2018-03-25 22:57:00)

Тема: AHK: Назначение комбинаций клавишам нампада.

Уважаемое сообщество.

Нет ли тут скрипта, который бы контролировал активное окно и в зависимости от него назначал клавишам нампада хоткеи или текстовые команды (например для Autocad).

Если нет, прошу помощи в реализации.

1. Запуск - выгрузка (включение-отключение) скрипта по F11 или F12.
2. После запуска появляется (или «зажигается) иконка в трее. Программа мониторит активное окно и в зависимости от него по разному обрабатывает нажатия клавиш нампада.
3. При обнаружении отслеживаемого окна секунд на 5 в трее появляется всплывающая подсказка по хоткеям для данной программы.
4. Возможность простого добавления в скрипт любых назначений любых программ путём вставки соответствующего блока для оператора, аналогичного case в Паскале.

Пока понял только про назначения. К сожалению в школе учил паскаль, поэтому сишный скобочный синтаксис воспринимаю тяжело.

Пока канва вырисовывается следующая

Как запускать и отключать по F12? Очевидно через хуки

#SingleInstance, Force
#NoEnv
SetTitleMatchMode, 2

xxxHelp :=
(LTrim Join`n
"Назначение клавиш нампада
1 —
2 —
3 —
4 —
5 —
6 —
7 —
8 —
9 —
+ —
-  —
*
Enter —
Ins —"
)

yyyHelp :=
(LTrim Join`n
"Назначение клавиш нампада
1 —
2 —
3 —
4 —
5 —
6 —
7 —
8 —
9 —
+ —
-  —
*
Enter —
Ins —"
)

ACADHelp :=
(LTrim Join`n
"Назначение клавиш нампада
1 —
2 —
3 —
4 —
5 —
6 —
7 —
8 —
9 —
+ —
-  —
*
Enter —
Ins —"
)

цикл контроля активного окна?

WinGetActiveTitle, Title ; получаем название текущего окна и переназначаем клавиши

Если (как сделать сравнение несколькими вариантами)
#IfWinActive ahk_class XXX.exe
тут надо на 4-5 секунд всплывающая подсказка в трее. CTRL-H и мессаджбокс нежелательно, чтобы не перехватывать комбинации из оригинального софта
NumpadIns::^DOWN
Numpad0::^DOWN
NumpadEnd::^!DOWN
Numpad1::^!DOWN
NumpadDown::^J
Numpad2::^J
NumpadPgDn::^I
Numpad3::^I
NumpadLeft::
Numpad4::^!S
NumpadClear::^!T
Numpad5::^!T
NumpadRight::^!R
Numpad6::^!R
NumpadHome::
Numpad7::
NumpadUp::^F
Numpad8::^F
NumpadPgUp::^H
Numpad9::^H
NumpadAdd::^C
NumpadSub::^V
NumpadMult::^A

#IfWinActive ahk_class YYY.exe
тут надо на 4-5 секунд всплывающая подсказка в трее
NumpadIns::
Numpad0::
NumpadEnd::
Numpad1::
NumpadDown::
Numpad2::
NumpadPgDn::
Numpad3::
NumpadLeft::
Numpad4::
NumpadClear::
Numpad5::
NumpadRight::
Numpad6::
NumpadHome::
Numpad7::
NumpadUp::
Numpad8::
NumpadPgUp::
Numpad9::
NumpadAdd::^C
NumpadSub::^V
NumpadMult::^A

#IfWinActive ahk_class ACAD.exe
тут надо на 4-5 секунд всплывающая подсказка в трее

NumpadIns::
Numpad0::
NumpadEnd::
Numpad1:: (КАК ПЕРЕДАТЬ ТЕКСТОВУЮ КОМАНДУ LINE/ЛИНИЯ?)
NumpadDown::
Numpad2::
NumpadPgDn::
Numpad3::
NumpadLeft::
Numpad4::
NumpadClear::
Numpad5::
NumpadRight::
Numpad6::
NumpadHome::
Numpad7::
NumpadUp::; (КАК ПЕРЕДАТЬ ТЕКСТОВУЮ КОМАНДУ FIND/НАЙТИ?)
Numpad8::
NumpadPgUp::
Numpad9::
NumpadAdd::
NumpadSub::
NumpadMult::

return

Буду благодарен за любые идеи и подсказки или наводку на уже существующее решение,  требующее только допиливания под конкретные нужды...

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

2 (изменено: KusochekDobra, 2018-03-26 01:48:16)

Re: AHK: Назначение комбинаций клавишам нампада.

Доброго здоровья!
Переименуйте пожалуйста название обсуждения, добавив в его начало "AHK:", по примеру остальных.

Разделите список хоткеев директивами #IfWinActive, например:


#IfWinActive, ahk_exe XXX.exe
NumpadIns::^DOWN
Numpad0::^DOWN
...
#IfWinActive, ahk_exe YYY.exe
NumpadIns::
Numpad0::
...

Тогда разным окнам будут назначены разные указания, привязанные к одинаковым клавишам, как это описано в справке.
Описания Help-подсказки опишите в секции автовыполнения сценария, например, так:


xxxHelp :=
	(LTrim Join`n
	"Активное окно ""XXX.exe""
	
	NumpadIns::^DOWN
	Numpad0::^DOWN
	NumpadEnd::^!DOWN
	Numpad1::^!DOWN"
	)

И вызов "Help" по хоткеям можно так же описать в каждом блоке, привязав его к одинаковой комбинации, например:


; Ctrl+H
^sc23:: MsgBox % xxxHelp

В итоге, должно получиться примерно так:


#SingleInstance, Force
#NoEnv
SetTitleMatchMode, 2

xxxHelp :=
	(LTrim Join`n
	"Активное окно ""XXX.exe""
	
	NumpadIns::^DOWN
	Numpad0::^DOWN
	NumpadEnd::^!DOWN
	Numpad1::^!DOWN"
	)
yyyHelp :=
	(LTrim Join`n
	"Активное окно ""YYY.exe""
	
	NumpadIns::
	Numpad0::
	NumpadEnd::
	Numpad1::"
	)
#IfWinActive, ahk_exe XXX.exe
NumpadIns::^DOWN
Numpad0::^DOWN
...
; Ctrl+H
^sc23:: MsgBox % xxxHelp
#IfWinActive, ahk_exe YYY.exe
NumpadIns::
Numpad0::
...
; Ctrl+H
^sc23:: MsgBox % yyyHelp

UPD:
Пожалуй, тоже буду дополнять этот пост своими наблюдениями, следуя выбранному стилю общения ТС, правда с разницей в том, что все новые предположения буду излагать ниже, чтобы всегда была видна нить рассуждения и не вводить читателя в заблуждение текстом, исходник которого уже не прочесть и не понять, на что именно был дан ответ.

Итак, на этом моменте, стоит уточнить, Вам нужен инструмент для расширения своих функциональных задач, или Вы собираетесь описать универсальную приспособу, годную для всех случаев жизни, оформленную всякими там визуальными красивостями, анимациями и спецэффектами?

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

Если второе, то описанный приём будет хорошим стартом для того, чтобы точнее понять, насколько точно и что конкретно необходимо. Попробуйте описать так, чтобы хоть как-то заработало, после чего добавите новый функционал.

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