1

Тема: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

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

Предпочтительно, чтобы это можно было установить для всех команд (с отдельной гк для каждой) внутри одного скрипта

f7::
send,{alt}{t}{t}{c}
return

f8::
send,{alt}{o}{k 2}{enter}{tab 3}
return

2

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

http://www.script-coding.com/AutoHotkey … ctive.html

3

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

В таком виде вроде работает:

f7::
wingetactivetitle, title
   if (title ~= "Program")
send,{alt}{t}{t}{c}
return

f8::
wingetactivetitle, title
   if (title ~= "Program")
send,{alt}{o}{k 2}{enter}{tab 3}
return

А можно ли задать данное положение единственный раз, а не для каждой команды?

4

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

Что-то не пойму, вы по ссылке не ходили, что ли? Там как раз про то, что вам нужно.

5

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

Просто пример находится слишком далеко от начала статьи.

#IfWinActive ahk_class Notepad
^!a::MsgBox Вы нажали Ctrl-Alt-A, когда активно окно Блокнота.
; Эта горячая клавиша не будет иметь никакого эффекта
; если нажата в других окнах (клавиши направятся окну не измененными).
#c::MsgBox Вы нажали Win-C, когда активно окно Блокнота.
::btw::Эта строка автозамены для "btw" сработает только в Блокноте.
#IfWinActive
#c::MsgBox Вы нажали Win-C в окне, отличном от Блокнота.
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.32.00 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

6

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

А WinGetActiveTitle там где находится?

7

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

serzh82saratov пишет:

Просто пример находится слишком далеко от начала статьи.

Просто при записи в таком виде (ahk_class Program) скрипт не видит нужной программы, т.е. не воспроизводится ни в ней, ни где-либо еще. Я вероятно не понимаю хода мысли разработчиков, пока что пробую методом тыка.

8

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

Здравствуйте.

Есть команда: по CTRL+1 печатает текст "Привет".

Как сделать, чтобы эта команда работала:
1. Только с процессом chrome.exe (не с окнами).

2. Везде, кроме процесса chrome.exe

9

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

А как может быть, чтобы скрипт работал не с окнами, а с процессом? Процесс chrome.exe обладает клавиатурным хуком?

10

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

Текст может быть напечатан только в окне, так что такая команда не может работать «не с окнами». Или поясните, что вы имеете в виду.

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

11

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

teadrinker пишет:

Текст может быть напечатан только в окне, так что такая команда не может работать «не с окнами». Или поясните, что вы имеете в виду.

Простите, я имел ввиду вот что.

В ahk есть же команда "закрыть окно" и есть команда "закрыть процесс". Мне больше понравилась команда "закрыть процесс".

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

Я буду работать с окном, все верно, оно будет активно, в нем я буду нажимать CTRL+1 и в месте, где ввожу текст, появится "Привет".

Но хотел, чтобы запись в ahk была не с окном, а с процессом, у которого есть это окно.

Но если вам кажется лучше сделать это с окнами, то буду рад попытаться понять, как это сделать. Ведь нужно, чтобы текст "Привет" вставлялся только в chrome. И другой вариант, чтобы вставлялся где угодно, но только не в chrome.

12 (изменено: teadrinker, 2020-05-08 16:50:06)

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

ravett12 пишет:

Но хотел, чтобы запись в ahk была не с окном, а с процессом, у которого есть это окно.

Если вы хотите работать именно с процессом, то куда будет отправляться текст? Логичнее работать с окном, принадлежащим определённому процессу. В AHK для этого есть критерий ahk_exe. Если активно окно Хрома:

#If WinActive("ahk_exe Chrome.exe")
^1:: SendInput {Text}привет

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

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

13

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

teadrinker пишет:
ravett12 пишет:

Но хотел, чтобы запись в ahk была не с окном, а с процессом, у которого есть это окно.

Если вы хотите работать именно с процессом, то куда будет отправляться текст? Логичнее работать с окном, принадлежащим определённому процессу. В AHK для этого есть критерий ahk_exe. Если активно окно Хрома:

#If WinActive("ahk_exe Chrome.exe")
^1:: SendInput {Text}привет

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

Мне казалось, будет выглядеть сложнее. Спасибо, это оно.

На счет обратного. Первое, что пришло в голову оказалось верным, но не верной оказалась реализация. Добавить Not. Я его вписал между Win и Active

#if not WinActive("ahk_exe Chrome.exe")
	^1:: SendInput {Text}привет

Получилось, как хотелось.

Большое спасибо за помощь).

14

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

Вместо слова not можно использовать восклицательный знак:

#if !WinActive("ahk_exe Chrome.exe")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15

Re: AHK: Как задать срабатывание горячих клавиш внутри одной программы?

Или в данном случае не использовать ничего.


#if WinActive("ahk_exe Chrome.exe")
1:: MsgBox Chrome
#if 
1:: MsgBox не Chrome
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.32.00 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui