1 (изменено: V69, 2012-05-10 21:25:29)

Тема: AHK: Закрытие/отмена закрытия вкладок в браузере

Здравствуйте уважаемые форумчане.
Подскажите пожалуйста, возможно ли реализовать следующее:
1) После нажатия и удержания правой клавиши мыши, нажатие на левую посылает ^w в активное окно (закрытие вкладки)
2) После нажатия и удержания левой клавиши мыши, нажатие на правую посылает ^+t в активное окно (отмена закрытия вкладки)
Прошу учесть, что у меня установлено расширение для управления жестами мыши(думаю, возможны конфликты)

2

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

V69, ознакомься с этой темой, отредактируй заголовок.

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

3

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

teadrinker пишет:

V69, ознакомься с этой темой, отредактируй заголовок.

Извиняюсь, исправил.

4

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

LButton:: Click down
RButton:: Click down right
LButton Up::
   SendInput % GetKeyState("RButton","P") ? "^{vk57}" : "{Click up}"
return
RButton Up::
   SendInput % GetKeyState("LButton","P") ? "^{vk54}" : "{Click up right}"
return

5 (изменено: V69, 2012-05-11 00:02:35)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Irbis пишет:
LButton:: Click down
RButton:: Click down right
LButton Up::
   SendInput % GetKeyState("RButton","P") ? "^{vk57}" : "{Click up}"
return
RButton Up::
   SendInput % GetKeyState("LButton","P") ? "^{vk54}" : "{Click up right}"
return

Спасибо что ответили!
^+{vk54} — добавил сюда Shift, после этого поставленные функции выполняет, но работает со следующими недостатками:
1) После закрытия вкладки и отпускания правой клавиши мыши, появляется контекстное меню.
2) После отмены закрытия вкладки не получается переключиться на другую вкладку щелчком мыши по ней (закрыть выходит) до тех пор, пока я не щелкну правой.
Проверил в Opera, в ней тоже баги, хоть и немного отличаются.

6

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Работает как просили. Вероятно «rocker gestures» это не только «клик одной кнопкой мыши при удержании другой».
В firefox и ie9 «недостатков» упомянутых  выше не наблюдаю.

7

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

LButton::
RButton::
   StartTime:=A_TickCount
   While, GetKeyState(A_ThisHotkey, "P")
   {
      Sleep, 50
      If A_TickCount-StartTime>300
      {
         KeyWait, % A_ThisHotkey
         Bool:=SubStr(A_ThisHotkey, 1, -6)="R"
         Return
      }
   }
   If % Bool="" Or A_ThisHotkey=A_PriorHotkey
      Send, % "{"A_ThisHotkey "}"
   Else Send, % "^"(Bool ? "":"+")
            . "{vk5"(Bool ? 7:4)"}"
   Bool:=
   Return

8 (изменено: Irbis, 2012-05-11 03:49:19)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Grey, в твоем скрипте есть следующий недостаток - невозможность произвести click&drag (выделение, перетаскивание и т.д.)
В моем скрипте для устранения такой "особенности" и обрабатываются по отдельности click up и click down

Upd:
Хотя... Пришла в голову мысль - может, не стоит изобретать велосипед?

~LButton & RButton:: Send ^+{vk54}
RButton & LButton:: Send ^{vk57}
RButton up:: click R

И кстати, V69 - если насчет ^w я смог догадаться, что сие означает, но что ^+t это Ctrl+Shift+T - это только методом математической индукции можно вычислить.
(поскольку находится в обычном тексте, а не в оформленном подобающим образом коде).

9 (изменено: V69, 2012-05-11 08:04:21)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Irbis пишет:

И кстати, V69 - если насчет ^w я смог догадаться, что сие означает, но что ^+t это Ctrl+Shift+T - это только методом математической индукции можно вычислить.
(поскольку находится в обычном тексте, а не в оформленном подобающим образом коде).

Спасибо за наставление, в будущем учту!

Irbis пишет:

Хотя... Пришла в голову мысль - может, не стоит изобретать велосипед?

~LButton & RButton:: Send ^+{vk54}
RButton & LButton:: Send ^{vk57}
RButton up:: click R

Спасибо, так действительно работает, правда только в браузере, в Total Commander-е, например, перестало работать выделение правой клавишей мыши и контекстное меню.

10 (изменено: V69, 2012-05-11 08:07:55)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

После изменения кода:


#IfWinActive ahk_class Chrome_WidgetWin_0
{
~LButton & RButton:: Send ^+{vk54}
RButton & LButton:: Send ^{vk57}
RButton up:: click R
}
return

все работает как надо.
Скажите, в вышеописанном коде есть ошибки, возможно его можно еще лучше записать?

11

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Пардон, я ошибся, во всех случаях не работают жесты мышью, так что вопрос все еще открыт.

12 (изменено: Irbis, 2012-05-11 16:37:08)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

С этим сложней - чтобы работали жесты, необходимо посылать RButton down приложению, а ведь скрипт не знает заранее, будет ли это простой клик, жест или наш хоткей RButton & LButton.
После нажатия опять же надо послать RButton up, иначе возникнут те самые артефакты с невозможностью переключиться на другую вкладку щелчком и прочая.
Пока что мне видится лишь вариант с переносом функции распознавания жестов на другую кнопку (например, MButton). Т.е. нажал и двигаешь мышь - она работает как правая кнопка, простой одиночный клик - выполняет стандартную функцию.

13

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Я попробовал использовать

GetKeyState

, но у меня ничего не выходит.

#IfWinActive ahk_class Chrome_WidgetWin_0
	{
	GetKeyState, state, RButton
	if state = D
		{
		GetKeyState, state, LButton
		if state = D
		send ^{vk57}
		}
		return
	GetKeyState, state, LButton
	if state = D
		{
		GetKeyState, state, RButton
		if state = D
		send ^+{vk54}
		}
		return
	}
return

14

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

А что должно выйти? Сразу после запуска скрипта происходит проверка нажата ли RButton и т.д.
#IfWInActive — директива задающая контекст срабатывания горячих клавиш указанных ниже.

15

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

creature.ws пишет:

А что должно выйти? Сразу после запуска скрипта происходит проверка нажата ли RButton и т.д.
#IfWInActive — директива задающая контекст срабатывания горячих клавиш указанных ниже.

Не совсем вас понял, я написанным выше хотел добиться следующего:
Если нажата правая клавиша мыши, происходит проверка нажата ли левая, в случае ДА окну отправляется сочетание клавиш.
Если нажата левая клавиша мыши, происходит проверка нажата ли правая, в случае ДА окну отправляется сочетание клавиш.

16 (изменено: creature.ws, 2012-05-11 20:47:57)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Вы этого добились
Но проверка нажата ли клавиша происходит не когда клавиша нажата, а однократно после начала выполнения скрипта.

Есть секция автовыполнения — участок кода в скрипте от начала скрипта до первого return или метки горячей клавиши. Есть метки горячих клавиш — подпрограммы, выполняющиеся при нажатии (в частности) горячей клавиши до первого return, exit или exitapp.
Директива #IfWinActive — не «начало подпрограммы выполняющейся при активации окна» — ahk не отслеживает события подобного типа, а «приказ» горячим клавишам, указанным в теле скрипта ниже данной директивы выполнять действия, им приписанные лишь, в случае если активно некое заданное окно.

17

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

creature.ws пишет:

Но проверка нажата ли клавиша происходит не когда клавиша нажата, а однократно после начала выполнения скрипта.

А как сделать, чтобы она происходила с определенной периодичностью во время работы программы?

creature.ws пишет:

а «приказ» горячим клавишам, указанным в теле скрипта ниже данной директивы выполнять действия, им приписанные лишь, в случае если активно некое заданное окно.

Так вообщем-то и задумывалось.

18 (изменено: creature.ws, 2012-05-11 21:00:33)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Так вообщем-то и задумывалось.

Где в коде сообщения #13 метки горячих клавиш?

А как сделать, чтобы она происходила с определенной периодичностью во время работы программы?

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

19

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Речь идет об этом:

send ^{vk57}

, или о чем?

20 (изменено: creature.ws, 2012-05-11 21:12:17)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Речь от том, что в коде сообщения #13 нет меток горячих клавиш и директива #IfWinActive неуместна и бессмысленна.

Выше — достаточно примеров и объяснений, незачем «изобретать велосипед». Попробуйте разобраться в имеющемся.

21

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

creature.ws пишет:

Речь от том, что в коде сообщения #13 нет меток горячих клавиш и директива #IfWinActive неуместна и бессмысленна.

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

creature.ws пишет:

Выше — достаточно примеров и объяснений, незачем «изобретать велосипед». Попробуйте разобраться в имеющемся.

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

22 (изменено: creature.ws, 2012-05-11 21:50:33)

Re: AHK: Закрытие/отмена закрытия вкладок в браузере


Edit:
В сообщении #12 сказано почему не выйдет использовать «две программы распознавания жестов привязанных к одной кнопке».

23

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Сделал так:


#IfWinActive ahk_class Chrome_WidgetWin_0
{
~RButton & MButton:: Send ^+{vk54}
RButton & LButton:: Send ^{vk57}
}
return

Теперь не знаю как избавится от контекстного меню, которое выскакивает после закрытия/отмены закрытия вкладки при отпускании RButton.

24

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Очерчивать блок фигурными скобками не нужно, директива активна для горячих клавиш вплоть до следующего указания #If. Меню выскакивает так как первая из двух горячих клавиш «прозрачна», т.е. нажатие Rbutton не блокируется.

25

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

creature.ws пишет:

Очерчивать блок фигурными скобками не нужно, директива активна для горячих клавиш вплоть до следующего указания #If.

Спасибо, буду знать.

creature.ws пишет:

Меню выскакивает так как первая из двух горячих клавиш «прозрачна», т.е. нажатие Rbutton не блокируется.

Прозрачная из-за "~"?

И как с этим бороться, ведь иначе не будут работать мышиные жесты?

26

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

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

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

27

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Попробуй такое сочетание, мне показалось оно удобным (ЛКМ+поворот колеса мыши) :

#IfWinActive ahk_class Chrome_WidgetWin_0
~LButton & WheelUp:: Send ^+{vk54}
~LButton & WheelDown:: Send ^{vk57}
#IfWinActive

28

Re: AHK: Закрытие/отмена закрытия вкладок в браузере

Irbis пишет:

Попробуй такое сочетание, мне показалось оно удобным (ЛКМ+поворот колеса мыши) :

Спасибо, попробую хоть и сомневаюсь, что средним пальцем будет удобно крутить колесико мыши.