1

Тема: AHK: Как выполнить нажатие, если процесс opera.exe + странности

Menu, Tray, Icon, mouse1.ico, 1
~LButton & RButton::Send, ^{Enter}
XButton2::Send, ^c
XButton1::Send, ^v
MButton::Click 2

Вот такой код.

Вопрос 1: (пол форума перерыл, так и не смог понять, как это сделать)
В Опере есть такое сочетание клавиш как Ctrl + Enter. Оно используется для автоввода пары логин-пароль
И вот я сделал такое сочетание:

~LButton & RButton::Send, ^{Enter}

И оно прекрасно работает, но когда я вдруг открыл Corel или Xara, то там сочетание "когда зажата правая, нажимаем левую" используется для копирования объектов и если в Xara этот вопрос можно легко обойти, то в Corel как это сделать непонятно.
В связи с таки положением вещей, я хочу сделать так, чтобы скрипт выполнял вышеуказанную строчку кода, только тогда, когда активный процесс является opera.exe . Я не хочу привязываться к названию окна, т.к. оно каждый раз разное.
Т.е. мне нужен такой алгоритм:

1. Когда я нажимаю это ~LButton & RButton
2. Произвести проверку активного окна и
3. Если активное окно это программа opera.exe, то выполнить Send, ^{Enter}
4. А если активное окно это другой процесс, то ничего не делать

Вопрос 2
Вот код:

XButton2::Send, ^c
XButton1::Send, ^v
MButton::Click 2

В котором исправно работает только MButton::Click 2
А Первые две строчки работают... работают и вдруг в какой-то момент БАЦ... и перестаёт работать Ctrl.
Т.е. я нажимаю XButton2 и вместо копирования у меня в активное окно печатается буква "c"
Соотвественно нажатие XButton1 приводит к вставке буквы "v"

Проявляется это спонтанно. Я не могу отловить никак. Не знаю почему и самое главное не знаю, в связи с чем такое вообще возможно.
И что самое интересно, иногда это проходит. Само по себе проходит тоже не понятно по каким причинам.

Может быть TranslateClient как-то влияет. Может быть KeySwitcher.

Если я в трее нажимаю Pause, а затем снова запуск.... это ничего не меняет. Т.е. если прога переключилась в режим "просто c и просто v", то помогает только перезапуск программы. нифига не помогает даже перезапуск. В чём причина не знаю. Сейчас уже перезапускал раз 10... не помогает. Программа ушла в непонятку, что может влиять не знаю, хотя похоже при переходе в окно Notepad++

Как полечить второе вообще не знаю, сейчас выловил, что проблема в Notepad++ решается его перезапуском. Но, что интересно, обычное сочетание Ctrl+c и Ctrl+v на клавиатуре в ноутпаде++ прекрасно работает.

Может подскажите, как решить подобную проблему. Может быть как-то укрупнить скрипт и что-нибудь придумать такое эдакое.

Os. WinXP Pro SP3

2

Re: AHK: Как выполнить нажатие, если процесс opera.exe + странности

Сейчас это произошло и без Notepaв++ . Ну ёлки палки. Перезапуск программы ничего не даёт. Просто обидно... то работала как часы, теперь переключается в режим "без CTRL" и никак не получается вернуть.

3

Re: AHK: Как выполнить нажатие, если процесс opera.exe + странности

Я не хочу привязываться к названию окна, т.к. оно каждый раз разное.

Привязываться к классу окна?! Помнится, так было можно.

4

Re: AHK: Как выполнить нажатие, если процесс opera.exe + странности

1. Использовать #IfWinActive ahk_class <тут класс оперы>

2. Использовать виртуальные коды ^{vk56} для ^v и ^{vk43} для ^c

5 (изменено: zuma, 2011-01-28 05:31:25)

Re: AHK: Как выполнить нажатие, если процесс opera.exe + странности

Спасибо за быстрый ответ. не думал, что тут по ночам кто-то ещё шарится. Вот стал мучится, чтобы доделать.

Второй вопрос разрешился полностью, но возник наводящий вопрос. А как узнать коды нажатых клавиш? Дайте строчку кода, чтобы в MsgBox выскакивало например (просто хочу ещё и Ctrl+x задействовать, а постоянно спрашивать коды, как-то глупо).

Первый вопрос до конца не решён. Изначально я написал такой код:

~LButton & RButton::
        IfWinActive, ahk_class OperaWindowClass
            Send, ^{Enter}
Return

И он срабатывал, но в Кореле ничего не происходило. Т.е. видимо скрипт всё-таки перехватывает это сочетание, а в замен ничего не отдаёт
Тогда я написал так:

~LButton & RButton::
        IfWinActive, ahk_class OperaWindowClass
            Send, ^{Enter}
        IfWinNotActive, ahk_class OperaWindowClass
            ~LButton & RButton
Return

Но так в Кореле тоже ничего не происходит. Может быть это особенности Корела, а может я чего-то не знаю?

Нашёл как победить:

~LButton & RButton::
        IfWinActive, ahk_class OperaWindowClass
            Send, ^{Enter}
        IfWinNotActive, ahk_class OperaWindowClass
            MouseClick, Middle
Return

И вот теперь бьюсь и не могу вставить Ctrl+x
Хочу, чтобы функция срабатывала так: "Когда я нажимаю левую кнопку мыши и выделяю, я (не отпуская ЛКМ) нажимаю Xbutton2 и выделенное вырезается через сочетание Ctrl+x"
Пробую код такой:

~LButton & XButton2::Send, ^{vk58}

Ничего не происходит. Как будто ничего и не нажимал.

6

Re: AHK: Как выполнить нажатие, если процесс opera.exe + странности

zuma, не

~LButton & RButton::
        IfWinActive, ahk_class OperaWindowClass
            …
        IfWinNotActive, ahk_class OperaWindowClass
            …

а почитать про «#IfWinActive»:

InFlames пишет:

1. Использовать #IfWinActive ahk_class <тут класс оперы>

7

Re: AHK: Как выполнить нажатие, если процесс opera.exe + странности

Виртуальные коды можно посмотреть, открыв основное окно ниже написанного скрипта ahk (двойной клик на иконке в трее по значку ahk), и затем нажать ctrl+k.
Откроется история хоткеев, нажимаете нужный хоткей (для ctrl+x можно нажимать просто x). В соответствующем столбце будет виден виртуальный код нажатой клавиши.
Для x это VK58, для ctrl+x это ^{VK58}

#InstallKeybdHook
#InstallMouseHook

Так же виртуальные коды есть тут

8 (изменено: zuma, 2011-01-28 20:08:03)

Re: AHK: Как выполнить нажатие, если процесс opera.exe + странности

alexii пишет:

а почитать про «#IfWinActive»:

Благодарю. Я ведь только вчера в 23:00 первый раз открыл для себя AHK, не пинайте сильно

Для меня что #IfWinActive, что просто IfWinActive было одним и тем же.

Попробовал так:

#IfWinActive ahk_class OperaWindowClass
    ~LButton & RButton::Send, ^{Enter}
Return

Так тоже работает. Это хорошо, когда есть несколько вариантов для решения одной задачи

InFlames пишет:

Для x это VK58, для ctrl+x это ^{VK58}

#InstallKeybdHook
#InstallMouseHook

Так же виртуальные коды есть тут

Благодарю за ссылку, а код этот я уже нашёл на форуме вчера где-то в районе 4-х ночи (я ведь отредактировал сообщение и там уже учавствует клавиша ^{VK58}. Правда предложенный вам "проверщик" я нашёл ещё с одной строчкой и выглядит он так:

#InstallKeybdHook
#InstallMouseHook
KeyHistory

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