1

Тема: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Назначил популярные офисные команды на стандартную 3х-кнопочную мышь. За основу брал скрипт YMP.
Все работает, Но! Уже второй день мучаюсь - не могу отключить появление стандартного меню ПКМ при использовании ее в комбинациях. Т.е. при комбинации ПКМ+ЛКМ=Ctrl+V не должно выполняться Click up right.
Помогите, пожалуйста!

; Скрипт выполняет ЛКМ+ПКМ=Ctrl+С, ПКМ+ЛКМ=Ctrl+V, ЛКМ+СКМ=Ctrl+X, ПКМ+СКМ=Ctrl+Z, СКМ=Alt+F4, ПКМ+WheelUp=Alt+Tab, ПКМ+WheelDown=Shift+Alt+Tab

RButton::
  if GetKeyState("LButton", "P")  ; Нажата ли LButton
  {
    Click up             ; отжать LButton 
    Send, ^{vk43}        ; Ctrl-c, копи.
    Quit=1               ; 
  }
  else 
  {
    Click down right ; Нажать клавишу
    KeyWait, RButton ; Подождать
    Click up right ; 
  }
Exit

LButton::
  if GetKeyState("RButton", "P")  ; Нажата ли RButton
  {
    Click up             ; отжать LButton    
    Send, ^{vk56}        ; Ctrl-V.
    Quit=1               ; 
  }
  else  
  {
    Click down           ; Имитация 
    KeyWait, LButton     ; Жда 
    Click up             ; Имитация 
  }
Exit

Mbutton:: 
  if GetKeyState("LButton", "P")  ; Нажата ли RButton
  {
    Click up             ; отжать LButton 
    Send, ^{vk58}        ; Ctrl-X.
    Quit=1               ; 
  }
  else
  {
     if GetKeyState("RButton", "P")  ; Нажата ли RButton
     {
       Send, ^{vk5A}        ; Ctrl-Z.
       Quit=1               ; 
     }

     else Send, !{vk73}       ; AltF4.
  }
Exit

RButton & WheelDown:: ShiftAltTab
RButton & WheelUp:: AltTab

ПС: можно ли реализовать подобное путем, к примеру, RButton & LButton::  Send, ^{vk56}?
И еще вопрос: Это мой первый код. На первый взгляд, не видите ли Вы какие могут возникать конфликты в простом софте?

2

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

У меня на мышке "копировать" и "вставить" назначены на 4 и 5 кнопку (кнопки по бокам, используются большой и безымянный палец соотв.). Очень удобно. По возможности лучше приобрести мышку с большим количеством кнопок. А если под левой рукой есть клавиатура, то возможности использования горячих клавиш резко расширяются.

3

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Полностью согласен, но женщины на работе просили, чтобы "всё мышкой" (с), особенно ЛКМ+ПКМ=Ctrl+С, ПКМ+ЛКМ=Ctrl+V.
Так что жду Вашей помощи.

4

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Кажется, тут логика алгоритма хромает. Давайте разберёмся. Только начну не с края, а с середины.

Нажата ПКМ ---> Проверяем состояние ЛКМ ---> если ЛКМ была нажата, то послать Ctrl+С.

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

5

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Повторно соглашусь: да, логика может хромать, но всё же алгоритм работает.:)

ypppu пишет:

Если ЛКМ была нажата, то как компьютер поймёт, пользователь хочет вслед за этим нажать ПКМ или просто отпустит ЛКМ?

Для этого на эти кнопки стоит соответствующее ожидание KeyWait.

Я пытался вписать желаемый процесс "копи-паст" только в одну ПКМ. Но застрял на одной команде. Вот смотрите:

RButton::
  if GetKeyState("LButton", "P")  ; Нажата ли LButton
  {
    Click up             ; отжать LButton 
    Send, ^{vk43}        ; Ctrl-c, копи.
    Quit=1               ; 
  }                         ; здесь без проблем!

  else
  {
     Click down right     ; жмем ПКМ
     KeyWait, RButton   ; ждем ее отпускания
     if                          ; а вот здесь нужна команда отслеживания нажатия/отпускания ЛКМ. но я такую не нашел.
        {
          Send, ^{vk56}        ; Ctrl-V.
          Quit=1               
        }
     else Click up right 
  }
Exit

ПС: Еще был вариант, в котором опять же не знаю команду для проверки: If (последняя посланная команда была {vk56}) то Quit=1

6

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

В последнем приведённом коде у Вас написано:  Нажата ли LButton. Так вот, если она уже нажата, значит щелчок произошёл? А почём компьютеру знать, хотел пользователь щелчок сделать, или зажать её, чтоб потом нажать RButton?

Если хромая логика устраивает, вот вариант. Но нельзя будет выделять и перетаскивать.

LButton & RButton:: Send, ^{vk43}        ; Ctrl+C
RButton & LButton:: Send, ^{vk56}        ; Ctrl+V.
LButton UP:: click
RButton UP:: click right

F12:: ExitApp

7

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

ypppu, с каждым Вашим ответом падает моя самооценка:) Видимо я просто Вас запутал, и мы ушли от темы.
Дело в том, что первоначальный скрипт полностью рабочий, т.е. выполняет то, что требуется. Особенно приятно, что зажав ПКМ и нажимая х раз ЛКМ, происходит х раз вставка. Вот только после последней вставки вы отпускаете ПКМ и  появляется ее меню, что, согласитесь, неприятно.
Я вижу 2 варианта решения, но не знаю для этого команд:

RButton::
...
    Click down right ; Нажать клавишу
    KeyWait, RButton ; Подождать
  If (последняя команда была Ctrl+V)        ;?
    Quit=1
  else
    Click up right ; 
Exit
LButton::
  if GetKeyState("RButton", "P")  ; Нажата ли RButton
  {
    Click up             ; отжать LButton    
    Send, ^{vk56}        ; Ctrl-V.
    (отключить отжатие ПКМ)                ; ?
    Quit=1               ; 
  }
  else ...

8

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Если не знаете команд, нарисуйте логическую схему.

И ответьте мне на вопрос. Я нажал на ПКМ (и пока не отпускаю). Что должен сделать компьютер? Воспринять это как нажатие ПКМ, или ждать, пока я не нажму ЛКМ?

9

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

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

10

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

ypppu пишет:

Я нажал на ПКМ (и пока не отпускаю). Что должен сделать компьютер? Воспринять это как нажатие ПКМ, или ждать, пока я не нажму ЛКМ?

Воспринять как нажатие ПКМ (но не отпускание) и ждать: если дальше клик ЛКМ, то "вставить" и выйти (проигнорировав последующее реальное отжатие ПКМ); если клика ЛКМ не было, то после последующего реального отжатия ПКМ - команда отжатия ПКМ.

InFlames, давайте пожалуйста ваш скрипт. Посмотрю как там это реализовано, а может на него и перейду.

Может повторюсь, но поймите, уже все написано, работает, я доволен своей самостоятельной работой. Но одну мелочь не удается найти. Это очень расстраивает Неужели невозможно?

11

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Воспринять как нажатие ПКМ (но не отпускание) и ждать: если дальше клик ЛКМ, то "вставить" и выйти (проигнорировав последующее реальное отжатие ПКМ); если клика ЛКМ не было, то после последующего реального отжатия ПКМ - команда отжатия ПКМ.

Сдаётся мне, игнорирование отжатия ПКМ (после "вставить") ни к чему хорошему не приведёт.
Кстати, ниспадающее меню возникает при нажатии ПКМ, а не отпускании.

12

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

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

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

13

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Ура! Все оказалось очень просто. Всем спасибо за помощь, а от наших женщин поцелуи
Еще добавил и поменял назначения. Теперь студенты смело смогут писать дипломную без клавиатуры

; Скрипт выполняет ЛКМ+ПКМ=Ctrl+С, ПКМ+ЛКМ=Ctrl+V, ЛКМ+СКМ=Ctrl+A, ПКМ+СКМ=Ctrl+X,
; СКМ=Alt+F4, CКМ+ЛКМ=Ctrl+Z, CКМ+ПКМ=Ctrl+S, ПКМ+WheelUp=Alt+Tab, ПКМ+WheelDown=Shift+Alt+Tab

RButton::
  if GetKeyState("LButton", "P")  ; Нажата ли LButton
  {
    Click up             ; отжать LButton 
    Send, ^{vk43}        ; Ctrl-C
    Quit=1
  }
  else Send, {RButton}
Exit

Mbutton::
  if GetKeyState("LButton", "P")  ; Нажата ли LButton
  {
    Click up
    Send, ^{vk41}        ; Ctrl-A.
    Quit=1               ; 
  }
  else Send, !{vk73}     ; Alt-F4.
Exit

RButton & Lbutton:: Send, ^{vk56}  ; Ctrl-V
RButton & Mbutton:: Send, ^{vk58}  ; Ctrl-X
Mbutton & Lbutton:: Send, ^{vk5A}  ; Ctrl-Z
Mbutton & Rbutton:: Send, ^{vk53}  ; Ctrl-S
RButton & WheelUp::  AltTab
RButton & WheelDown:: ShiftAltTab
;-) made by ponomart

ПС: а вот почему не получается назначить Lbutton & Rbutton:: Send, ^{vk43}  ; Ctrl-С для меня осталось загадкой.:/

14

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Работает, но ограничивает функциональность правой кнопки мыши — ею нельзя будет перетаскивать объекты.

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

15

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Спасибо, учту Ваше замечание для 5-ти кнопочной мыши. Скажите, где с этим могут возникнуть проблемы (софт кроме специфического), если перетаскивать можно лкм?

16

Re: AHK: Популярные офисные команды на стандартную 3х-кнопочную мышь

Никаких проблем, кроме уменьшения функциональности. Перетаскивание левой кнопкой и правой — не совсем одно и то же.

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