1 (изменено: zuma, 2011-01-28 20:11:29)

Тема: AHK: Как делать сложные и нестандартные сочетания клавиш?

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

Вопрос 1. Я сделал на Xbutton1 и Xbutton2 сочетания Ctrl+c и Ctrl+v, но теперь хочу сделать ещё и Ctrl+x, но при этом хочу использовать опять же только мышу. Задача такова:

Когда я нажимаю левую кнопку мыши и ведя мышкой выделяю какой-либо текст, я (не отпуская LButton) нажимаю Xbutton2. Выделенное при этом вырезается через сочетание Ctrl+x и естественно лежит в буфере обмена

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

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

Но не тут-то было. Ничего не происходит. Код не вырезается и даже не копируется (хотя у меня Xbutton2 в чистом её нажатии привязана к "^{vk43}).
Как сделать мою задумку?

Вопрос 2. А если я задумал более сложные варианты сочетания клавиш. AHK с этим справится? Например если нажать одновременно:

* Ctrl + Win + Z + X
* Xbutton1 + Xbutton2
* LButton + RButton + MButton
* Ctrl + Backspace + "+"

Возможно ли такое реализовать в AHK?

Вопрос 3. Задумал я реализовать ввод пароля (в одном месте, но часто использую) через "мышиную последовательность нажатий"
Имеется ввиду, что я нажимаю к примеру поочерёдно (но быстро)

LButton
LButton
RButton
RButton
LButton
RButton
LButton
RButton
MButton

(левая - левая - правая - правая - левая - правая - левая - правая - средняя)
И происходит ввод пароля например:

Send, 1234567890

Такое возможно осуществить при помощи AHK

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

2 (изменено: Александр_, 2011-01-29 02:57:48)

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

1) у меня всё исправно работает.
2) GetKeyState
3) идея проста- берём глобальную переменную("i"), пишем функцию, которую будут вызывать все участвующие в комбинации клавиши, передавая в параметре свой идентификатор(LButton-1, RButton-2, MButton-3). Функция проверяет, совпадает ли нажатая клавиша с нужной и если совпадает, то регистрирует это увеличивая переменную-счётчик. Дело слегка осложняет отсутствие массивов, но лишь слегка. Вот пример реализации:

i=1
f(x)
{
    c1=1
    c2=1
    c3=2
    c4=2
    c5=1
    c6=2
    c7=1
    c8=2
    c9=3
    global i
    if(c%i%==x)
    {
        i++
    }
    else
    {
        if(i==3&&x==1)
        {
            i=3
        }
        else
        {
            i=1
        }
    }
    if(i==10)
    {
        MsgBox "!!!"
        i=1
    }
}
~LButton::f(1)
~RButton::f(2)
~MButton::f(3)

Сюда можно и таймер прикрутить. Рекомендую так же изменить последовательность на такую, в которой первая и вторая клавиши не совпадают, это позволит убрать одно условие.

3

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Александр_, оператор "==" здесь точно не нужен, в AHK он используется для проверки совпадения регистра.

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

4

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

teadrinker пишет:

Александр_, оператор "==" здесь точно не нужен, в AHK он используется для проверки совпадения регистра.

Тогда почему скрипт:

if("A"=="A")
{
    MsgBox A==A
}
else
{
    MsgBox A!=A
}
if("A"=="a")
{
    MsgBox A==a
}
else
{
    MsgBox A!=a
}
if("A"=="K")
{
    MsgBox A==K
}
else
{
    MsgBox A!=K
}

выдаёт:
A==A
A!=a
A!=K
т.е. работает как обычное сравнение.

5

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Александр_ пишет:

1) у меня всё исправно работает.

В каком варианте? В предложенном мной?

Вот у меня код:

; ######### делаем новую китайскую мышУ по старинке #########

XButton2::Send, ^{vk43} ; -----------> ctrl + c (работает)
XButton1::Send, ^{vk56} ; -----------> ctrl + v (работает)

MButton::Click 2 ; --------------> двойной клик (работает)


; ######### пробую новую фичу #########

~LButton & XButton2::Send, ^{vk58} ; ---> ctrl + x   ### не работает (сволоч) ###

Всё в одном файле. Три первых директивы работают, а вот последняя нет.

6

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Обычное сравнение регистронезависимое:

if("A"="a")
{
    MsgBox A=a
}

В предыдущем скрипте оператор "==" избыточен, достаточно "=".

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

7

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

teadrinker пишет:

В предыдущем скрипте оператор "==" избыточен, достаточно "=".

А он избыточен по сути или можно или "==" или "=". Просто "==" как-то уже привычней. Если оно работает и с "==", может на этот счёт не заморачиваться?

8

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Если так нравится, ради бога! Только тот, кто будет читать такой код, не помёт, причём здесь сравнения регистров, когда идёт сравнение чисел?

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

9

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

zuma пишет:

Всё в одном файле. Три первых директивы работают, а вот последняя нет.

У меня всё работает, включая последнюю строчку.

teadrinker пишет:

В предыдущем скрипте оператор "==" избыточен, достаточно "=".

Во-первых в приведённом примере строки вообще не сравнивались, поэтому замечание "избыточно":). А во-вторых, скажите человеку пишущему системное или сервисное ПО, что 'А' и 'a'- это один и тот же символ(или одинаковые строки) и он непременно закидает вас "ссаными тряпками".

10

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Author пишет:

Во-первых в приведённом примере строки вообще не сравнивались, поэтому замечание "избыточно"

Не совсем понял. Если строки не сравниваются, то оператор "==" избыточен (если код на AHK, мы ведь об этом языке ведём речь, не так ли?), достаточно оператора "=".

Александр_ пишет:

А во-вторых, скажите человеку пишущему системное или сервисное ПО, что 'А' и 'a'- это один и тот же символ(или одинаковые строки) и он непременно закидает вас "ссаными тряпками".

А я и не говорю, что это один и тот же символ. Я говорю, что оператор "=" — регистронезависимый, и при сравнении чисел принято использовать его. Но, может, теперь всё будет по-другому, кто знает?

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

11

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Александр_ пишет:

У меня всё работает, включая последнюю строчку.

Ну в чём у меня может быть проблема. Я просто уже ума не приложу. Вы меня просто "на лопатки" ставите этим заявлением. Может быть что-то не так с тем что у меня:

Win XP Pro SP3
APH v.1.0.92.02
NotePad++
Блокнот (виндовый)

Александр_ пишет:

он непременно закидает вас "ссаными тряпками".

прикольная метафора. Но если рассудить логически, то существует два варианта:

1 - программист предварительно ссыт на тряпки и складирует их (ну мало ли... под рукой чтобы были или влом далеко идти, поэтому ссыт в тряпки)
2 - настолько наступили на эго программиста, что он пошёл, нашёл тряпки, специально их обоссал и закидал обидчика

12

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

zuma, давай "ссаные тряпки" обсуждать в личке.

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

13 (изменено: zuma, 2011-01-29 03:53:36)

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

teadrinker пишет:

zuma, давай "ссаные тряпки" обсуждать в личке.

я только за. Но почему у меня НЕ работает вот это:

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

14

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Возможно, особенности данной мыши. Можно так:

XButton2:: 
   if GetKeyState("LButton", "P")
      Send, ^{vk58}
   Return
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

15 (изменено: Александр_, 2011-01-29 04:29:37)

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

zuma пишет:

Может быть что-то не так с тем что у меня:

У меня Win7 максимальная со всеми обновлениями. Версия AHK 1.0.48.05. Думаю софт тут не причём. Попробуйте не блокировать XButton2, т.е. везде указать ~XButton2, убрать комментарии в строках с кодом, изменить порядок операторов и, наконец, заюзать GetKeyState(опоздал ).

teadrinker пишет:

Я говорю, что оператор "=" — регистронезависимый, и при сравнении чисел принято использовать его.

У кого принято? Пруфлинк обязателен(ОБС?).

16

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Александр_ пишет:

Пруфлинк обязателен(ОБС?).

Да без проблем, выбирай на вкус:
http://www.autohotkey.com/forum/viewfor … 35d39d936e

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

17

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Так первый вопрос снят.

Победить не удалось. Особенности мыши. Китайцы сплоховали в этом смысле.
Суть в чём. Видимо идёт "исключающая" особенность.
Выглядит этот так. Когда нажаты "RButton, LButton, MButton или их сочетания", то не пашут "XButton1 и XButton2" и соответственно наоборот. Поэтому сочетания между этими группа просто не возможно. Я это заметил при просмотре кода через:

#InstallKeybdHook
#InstallMouseHook
KeyHistory

Вроде нажимаю, а после F5 у меня либо Lbutton, либо Xbutton2, а вместе (рядышком) они не стоят.
Заметив это, я полез и достал старую (тяжёлую) мышу A4Tech. У неё такой проблемы нет. Работает и

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

и

XButton2:: 
   if GetKeyState("LButton", "P")
      Send, ^{vk58}
   Return

18 (изменено: zuma, 2011-01-29 05:12:46)

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

Дополнительный вопрос: А есть какой либо код, который означает AnyKey ?
Суть в чём. Хочу чтобы в "узнавателе кода кнопок" само нажималось F5

Т.е. если "Эникей" отжата, то передать F5. Такое возможно?

(ну или по таймеру чтобы каждые 2 секунды посылалось F5) <-- это не надо, я уже сам сделал, а про эникей всё-же интересно.

19

Re: AHK: Как делать сложные и нестандартные сочетания клавиш?

zuma пишет:

Дополнительный вопрос: А есть какой либо код, который означает AnyKey ?

Нету. А коды кнопок уже все давно узнаны. Например, тут гляньте удобный скрипт для их вставки: AutoHotkey: Начинающему разработчику - Печатаю виртуальными кодами.