1 (изменено: vanya, 2011-12-09 04:10:57)

Тема: AHK: Несколько действий по сочетанию клавиш в одном файле

Есть рабочий скрипт:

XButton1::SPACE

XButton2::Ctrl

^+a:: 
WinSet, Style, -0xC40000, A
WinMove, a, , 0, 0, 1280, 1024

Как добавить в этот скрипт ещё несколько, которые бы активировались по нажатию сочетания клавиш?
Тоесть что-то вроде этого:

XButton1::SPACE

XButton2::Ctrl

^+a:: 
WinSet, Style, -0xC40000, A
WinMove, a, , 0, 0, 1280, 1024

^+z:: 
MButton::Home

^+q:: 
LCtrl::Home

^+x:: 
XButton1::Enter

Так оно конечно не работает как хотелось бы. А хотелось бы вот так: Чтобы каждая часть скрипта активировалась по нажатию определённой комбинации клавиш и не активировала весь остаток скрипта. Тоесть допустим нажав ctrl+shift+a за одно не срабатывало это:

^+z:: 
MButton::Home

^+q:: 
LCtrl::Home

^+x:: 
XButton1::Enter

Короче говоря что я вообще от этого хочу:
Чтобы при нажатии ctrl+shift+a - срабатывало разворачивание окна на указанный размер, как оно и есть и только это.
При нажатии ctrl+shift+z - средняя кнопка мыши становилась кнопкой Home. Хорошо, если бы и выключалась той же комбинацией (тоесть становилось обратно средней кнопкой мыши). С остальными ниже комбинациями так же.
При нажатии ctrl+shift+q - Левый контрол станавился кнопкой Home (Жмёшь LCtrl, а срабатывает Home).
А при нажатии ctrl+shift+x - 4-ая кнопка мыши (XButton1) становилась кнопкой Enter.
И всё это в одном файле.

2 (изменено: Александр_, 2011-12-06 23:13:06)

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

^+z::
   ;обработчик
return

3

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Александр_ пишет:
^+z::
   ;обработчик
return

В обработчике воспользоваться командой Hotkey.

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

4 (изменено: vanya, 2011-12-07 05:42:28)

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

^+z::
Hotkey, MButton::Home
return

Что-то не так, никак не пойму что именно.

А если записать так:

^+z::
MButton::Home
return

То средняя кнопка мыши всегда работает как Home и сочетание клавиш никак на это не влияет.

5

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Вот по-русски, там примеры есть.

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

6

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Да, я читал. Я собстенно от туда этот форум и нашёл. Да и английский то я понимаю.
Как программист я никакой. По сути это должно было быть нечто очень простое. При помощи нескольких готовых рабочих скриптов и встроенного хелпа я думал можно что-то соорудить, но почему-то не получается. Может кто нить написать для примера как именно нужно записать?

7

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Использовать модификаторы не самая лучшая идея, у меня получилось но только с левым Windows :

#UseHook
Hotkey, *vk41, Action ; a - sizing border
Hotkey, *vk5A, Action2 ; z - MButton::Home
Hotkey, *vk51, Action3 ; q - LCtrl::Home
Hotkey, *vk58, Action4 ; x - XButton1::Enter
Hotkey, MButton, Action5
Hotkey, LCtrl, Action5
Hotkey, XButton1, Action5
Return

Action:
   If GetKeyState("vk5B" "P") ; LWin
   {
      WinSet, Style, -0xC40000, A ; WS_SIZEBOX
      WinMove, A,, 0, 0, 1280, 1024
      TrayTip,, % "WinSet, WinMove"
   }
   Else
   {
      Send, % "{"SubStr(A_ThisHotkey, 2)" Down}"
      KeyWait, % A_ThisHotkey
      Send, % "{"SubStr(A_ThisHotkey, 2)" Up}"
   }
   Return

Action2:
   If GetKeyState("vk5B" "P")
   {
      IsAction2:=!IsAction2
      TrayTip,, % "MButton::Home -"(IsAction2 ? " IsOn":" IsOff")
   }
   Else
   {
      Send, % "{"SubStr(A_ThisHotkey, 2)" Down}"
      KeyWait, % A_ThisHotkey
      Send, % "{"SubStr(A_ThisHotkey, 2)" Up}"
   }
   Return

Action3:
   If GetKeyState("vk5B" "P")
   {
      IsAction3:=!IsAction3
      TrayTip,, % "LCtrl::Home -"(IsAction3 ? " IsOn":" IsOff")
   }
   Else
   {
      Send, % "{"SubStr(A_ThisHotkey, 2)" Down}"
      KeyWait, % A_ThisHotkey
      Send, % "{"SubStr(A_ThisHotkey, 2)" Up}"
   }
   Return


Action4:
   If GetKeyState("vk5B" "P")
   {
      IsAction4:=!IsAction4
      TrayTip,, % "XButton1::Enter -"(IsAction4 ? " IsOn":" IsOff")
   }
   Else
   {
      Send, % "{"SubStr(A_ThisHotkey, 2)" Down}"
      KeyWait, % A_ThisHotkey
      Send, % "{"SubStr(A_ThisHotkey, 2)" Up}"
   }
   Return

Action5:
   If % A_ThisHotkey="MButton"
      Send, % "{"(IsAction2 ? "Home":"MButton")" Down}"
   Else If % A_ThisHotkey="LCtrl"
      Send, % "{"(IsAction3 ? "Home":"LCtrl")" Down}"
   Else If % A_ThisHotkey="XButton1"
      Send, % "{"(IsAction4 ? "Enter":"XButton1")" Down}"
   KeyWait, % A_ThisHotkey
   If % A_ThisHotkey="MButton"
      Send, % "{"(IsAction2 ? "Home":"MButton")" Up}"
   Else If % A_ThisHotkey="LCtrl"
      Send, % "{"(IsAction3 ? "Home":"LCtrl")" Up}"
   Else If % A_ThisHotkey="XButton1"
      Send, % "{"(IsAction4 ? "Enter":"XButton1")" Up}"
   Return

8

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

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

XButton1::SPACE

А нужно это для того, чтобы всегда XButton1 работал как пробел. А при нажатии Windows+X становился Энтером. Соотвестенно когда XButton1::Enter Off - становился обратно Пробелом.
В то время как

XButton2::Ctrl

запихнутый в конец, работает нормально.

9 (изменено: Grey, 2011-12-11 03:32:44)

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

#UseHook

*vk41:: ; a - sizing border
*vk5A:: ; z - MButton::Home
*vk51:: ; q - LCtrl::Home
*vk58:: ; x - XButton1::Enter
   If GetKeyState("vk5B" "P") And SubStr(A_ThisHotkey, 2)="vk41" ; vk5B - lwin
   {
      WinSet, Style, -0xC40000, A ; WS_SIZEBOX
      WinMove, A,, 0, 0, 1280, 1024
      TrayTip,, % "WinSet, WinMove"
   }
   Else If GetKeyState("vk5B" "P") And SubStr(A_ThisHotkey, 2)="vk5A"
   {
      IsActionZ:=!IsActionZ
      TrayTip,, % "MButton::Home -"(IsActionZ ? " IsOn":" IsOff")
   }
   Else If GetKeyState("vk5B" "P") And SubStr(A_ThisHotkey, 2)="vk51"
   {
      IsActionQ:=!IsActionQ
      TrayTip,, % "LCtrl::Home -"(IsActionQ ? " IsOn":" IsOff")
   }
   Else If GetKeyState("vk5B" "P") And SubStr(A_ThisHotkey, 2)="vk58"
   {
      IsActionX:=!IsActionX
      TrayTip,, % "XButton1::Enter -"(IsActionX ? " IsOn":" IsOff")
   }
   Else
   {
      Send, % "{"SubStr(A_ThisHotkey, 2)" Down}"
      KeyWait, % A_ThisHotkey
      Send, % "{"SubStr(A_ThisHotkey, 2)" Up}"
   }
   Return

MButton::
LCtrl::
XButton1::
XButton2::
   If % A_ThisHotkey="MButton"
      Send, % "{"(IsActionZ ? "Home":"MButton")" Down}"
   Else If % A_ThisHotkey="LCtrl"
      Send, % "{"(IsActionQ ? "Home":"LCtrl")" Down}"
   Else If % A_ThisHotkey="XButton1"
      Send, % "{"(IsActionX ? "Enter":"Space")" Down}"
   Else If % A_ThisHotkey="XButton2"
      Send, {Ctrl Down}
   KeyWait, % A_ThisHotkey
   If % A_ThisHotkey="MButton"
      Send, % "{"(IsActionZ ? "Home":"MButton")" Up}"
   Else If % A_ThisHotkey="LCtrl"
      Send, % "{"(IsActionQ ? "Home":"LCtrl")" Up}"
   Else If % A_ThisHotkey="XButton1"
      Send, % "{"(IsActionX ? "Enter":"Space")" Up}"
   Else If % A_ThisHotkey="XButton2"
      Send, {Ctrl Up}
   Return

10

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Переодически зависает control. Не понятно почему. Остаётся в нажатом положении и не отжимается.
Заметил это в фаерфокс. Если часто понажимать Xbotton2. Скорее всего не получает команды что кнопка уже отжалась или просто тормозит скрипт.
То что кнопка зажата лучше всего видно в Ветрилле где говорить забиндено на контрал. Или в фаерфоксе если покрутить колесо мыши, размез страницы изменяется.

11

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

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

12 (изменено: vanya, 2011-12-11 19:28:13)

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Хм, а теперь почему-то заедает кнопка "A". Запустил шутер и сразу заметил что не могу толком стрейфится влево. Его как-то дёргает, как будто я не держу кнопку нажатой, а часто часто нажимаю и отпускаю.

13

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Заменил LWin на Tab, проверил в CS:S - работает.

#UseHook
SetBatchLines, -1
Return

vk41:: ; a - sizing border
vk5A:: ; z - MButton::Home
vk51:: ; q - LCtrl::Home
vk58:: ; x - XButton1::Enter
   If GetKeyState("vk9" "P") And A_ThisHotkey="vk41" ; vk9 - tab
   {
      WinSet, Style, -0xC40000, A ; WS_SIZEBOX
      WinMove, A,, 0, 0, 1280, 1024
      TrayTip,, % "WinSet, WinMove"
   }
   Else If GetKeyState("vk9" "P") And A_ThisHotkey="vk5A"
   {
      IsActionZ:=!IsActionZ
      TrayTip,, % "MButton::Home -"(IsActionZ ? " IsOn":" IsOff")
   }
   Else If GetKeyState("vk9" "P") And A_ThisHotkey="vk51"
   {
      IsActionQ:=!IsActionQ
      TrayTip,, % "LCtrl::Home -"(IsActionQ ? " IsOn":" IsOff")
   }
   Else If GetKeyState("vk9" "P") And A_ThisHotkey="vk58"
   {
      IsActionX:=!IsActionX
      TrayTip,, % "XButton1::Enter -"(IsActionX ? " IsOn":" IsOff")
   }
   Else
   {
      Send, % "{"A_ThisHotkey " Down}"
      KeyWait, % A_ThisHotkey
      Send, % "{"A_ThisHotkey " Up}"
   }
   Return

MButton::
LCtrl::
XButton1::
XButton2::
   If % A_ThisHotkey="MButton"
      Send, % "{"(IsActionZ ? "Home":"MButton")" Down}"
   Else If % A_ThisHotkey="LCtrl"
      Send, % "{"(IsActionQ ? "Home":"LCtrl")" Down}"
   Else If % A_ThisHotkey="XButton1"
      Send, % "{"(IsActionX ? "Enter":"Space")" Down}"
   Else If % A_ThisHotkey="XButton2"
      Send, {Ctrl Down}
   KeyWait, % A_ThisHotkey
   If % A_ThisHotkey="MButton"
      Send, % "{"(IsActionZ ? "Home":"MButton")" Up}"
   Else If % A_ThisHotkey="LCtrl"
      Send, % "{"(IsActionQ ? "Home":"LCtrl")" Up}"
   Else If % A_ThisHotkey="XButton1"
      Send, % "{"(IsActionX ? "Enter":"Space")" Up}"
   Else If % A_ThisHotkey="XButton2"
      Send, {Ctrl Up}
   Return

14 (изменено: vanya, 2011-12-16 01:17:51)

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

Кто нить может объяснить почему если в коде выше поменять vk5A:: ; z - MButton::Home на vk21:: ; page up - MButton::Home, а так же GetKeyState("vk9" "P") And A_ThisHotkey="vk5A" на GetKeyState("vk9" "P") And A_ThisHotkey="vk21" - то при нажатии Tab + Page Up - ничего не происходит? А ведь остальной текст идентичен тому что выше.
Тоже самое с vk22, vk23, vk24.

PS.: И как выкинуть из скрипта такие параметры как vk41:: ; a - sizing border и vk58:: ; x - XButton1::Enter?
P.S.S: А всё затем, чтобы вернуть изначальный вид команде sizing border, а именно:

^+a:: ; CTRL+SHIFT+A для активации
WinSet, Style, -0xC40000, A
WinMove, a, , 0, 0, 1280, 1024
return

Потому что таки глючит. Меньше чем было, но глючит. Очень не приятно когда в бф3 вдруг замечаешь что не можешь стрейфится влево, но снова можешь если Exit скрипт из трея.

Добавленно позже:
В итоге обнаружился собстенно корень всех бед и главноый баг: Если юзать скрипт постом выше, то нельзя писать с Заглавной буквы теми кнопками, которые прописанны в скрипте. А именно Q, A, Z, X.

15 (изменено: Grey, 2011-12-16 21:12:26)

Re: AHK: Несколько действий по сочетанию клавиш в одном файле

vanya пишет:

Кто нить может объяснить почему если поменять... - то при нажатии Tab + Page Up - ничего не происходит?

А если тот же PgUp указать не ввиде виртуального кода (который собственно этой клавише и не нужен), то всё срабатывает.

vanya пишет:

Добавленно позже:
...корень всех бед и главноый баг: ...нельзя писать с Заглавной буквы...

О да!, это катастрофа - сказал бы я, но сего факта мною не обнаружено.