1

Тема: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Небольшая хотелка, еcли такое можно реализовать на AHK.
Если есть выделенный текст(где угодно), то
средняя кнопка мышки превращается в Ctrl+С, и по нажатию СКМ выделенный фрагмент текста копируется в буфер а
если нечего не выделено, то СКМ это просто СКМ и функционал его стандартен.

2

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Если где угодно, то задним числом только можно узнать, было ли что-то выделено. Т.е. сохранить содержимое буфера в переменную, очистить его, послать Ctrl-C, проверить, появилось ли что-нибудь в буфере. Если да, то дело сделано. Если нет, то вернуть из переменной содержимое в буфер, а в окно послать средний клик.

3

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Например так:
Освобождаете Clipboard
Посылаете Ctrl+C
Если Clipboard пустой посылаете клик средней кнопки
Если же нет, то return

4 (изменено: dredj, 2015-01-16 18:00:07)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Malcev пишет:

Если Clipboard пустой посылаете клик средней кнопки

А как/чем узнать что он пуст?

5

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

if (Clipboard = "")
   msgbox pusto

6 (изменено: dredj, 2015-01-16 18:42:03)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

MButton::
Clipboard =
Send, ^{vk43}
if (Clipboard = "")
Send, {MButton}
Return

Так почему-то СКМ в некоторых программах работает либо криво, либо вовсе не работает. Может есть другой вариант?

7

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Почитайте тут:
http://www.script-coding.com/AutoHotkey/Hotkeys.html

8

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Прочитал несколько раз но так и не понял в чём проблема.

9

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

А так?


MButton::
    Clipboard =
    Send, ^{vk43}
    ClipWait, 0.5
    if ErrorLevel
        Send, {MButton}
Return

10 (изменено: dredj, 2015-01-17 12:33:57)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

YMP, дело не в ClipWait, попытаюсь объяснить, например в браузерах и не только в браузерах, есть плавная прокрутка средней кнопкой мыши, нажатие СКМ включает плавную прокрутку а повторное нажатие выключает, с запущенным скриптом повторное нажатие не выключает плавную прокрутку. Наверное будет понятнее, если вы сами проверите это в браузере с запущенным скриптом.
Ещё пример, в 3D редакторах с помощью СКМ можно крутить объектом, в нашем случаи такой трюк не пройдёт, знаю что 3D редактор можно внести в исключения, это просто пример.

11

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Ну а сразу объяснить нельзя было? Как показал несложный эксперимент, посылаемый при втором нажатии Ctrl отключает прокрутку, а затем посыл средней кнопки опять её включает.

Тут проблема в том, что скрипту заранее не известно, зачем вы нажимаете среднюю кнопку. Если бы он знал, что для отключения прокрутки, то мог бы не посылать Ctrl-C при втором нажатии. Но откуда же ему знать?

12

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Давно хотел спросить, ведь хоткеи Ctrl-C да и Ctrl-V вызывают в виндовс некие функции API? Если так, то есть ли к ним доступ, чтобы вызвать?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13 (изменено: dredj, 2015-01-17 13:45:42)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Как показал несложный эксперимент, посылаемый при втором нажатии Ctrl отключает прокрутку, а затем посыл средней кнопки опять её включает.

Вот-вот, сам то я это понял, только не знал как объяснить.

Но откуда же ему знать?

Ну сперва думал может есть какая-то контекстно-чувствительная команда ждущее событие типа "что то выделено", на подобие IfWinActive/WinWaitActive

14

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

посылаемый при втором нажатии Ctrl отключает прокрутку

Перед тем как послать Ctrl, можно же проверить что он зажат, и если зажат, то послать только "С".

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

15

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

serzh82saratov пишет:

Давно хотел спросить, ведь хоткеи Ctrl-C да и Ctrl-V вызывают в виндовс некие функции API? Если так, то есть ли к ним доступ, чтобы вызвать?

Нет, система ничего специально для них не делает, это всё на усмотрение приложения. Просто сложилась традиция использовать их для работы с буфером обмена. Другое дело комбинации Ctrl-Ins, Shift-Ins, Shift-Del. Они вызывают посылку в окно сообщений WM_COPY, WM_PASTE, WM_CUT.

Но посылка WM_COPY не помогает — не работает в браузере. Возможно, не в тот контрол посылается.

Перед тем как послать Ctrl, можно же проверить что он зажат, и если зажат, то послать только "С".

А почему он должен быть зажат?

16 (изменено: Alectric, 2015-01-17 17:15:49)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Может так:

setbatchlines,-1

MButton::
  mousegetpos,,,,c
  Clipboard=
  Send,^{vk43}
  ClipWait,0
  if (errorlevel and oldc!=c)
    Send,{MButton}
  else if (oldc=c)
    c=
  else
  {
    tooltip,Скопировано.
    settimer,Removetooltip,-2000
  }
  oldc:=c
Return

RemoveToolTip:
tooltip,
return

Правда приходится иногда два раза жать.

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

17

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

У меня твой вариант не работает.
А так работает:

MButton::
Clipboard =
Send, ^{vk43}
ClipWait, 0.1
if ErrorLevel
{
   var := !var
   if var
      n = 1
   else if (A_PriorKey != "MButton")
   {
      n = 1
      var := !var
   }
   else
      n = 2
   Send, {MButton %n%}
}
return

Но это все зависит от приложения.
Например в фаерфоксе работает скрипт из шестого поста.
ЗЫ А разве для кликов мышью не надо значок доллара ставить, чтобы себя посылать?

18 (изменено: dredj, 2015-01-18 08:34:48)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Варианта Alectric работает через раз, Malcev, твой понадежнее, но СКМ кроме как в браузере нигде больше не работает.

19

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Malcev пишет:

ЗЫ А разве для кликов мышью не надо значок доллара ставить, чтобы себя посылать?

Нет. Мышиные хоткеи всегда с помощью хука реализуются.

20

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

но СКМ кроме как в браузере нигде больше не работает.

Нигде это где?
Я в ворде тестировал.

21 (изменено: Alectric, 2015-01-18 09:23:18)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Malcev пишет:

У меня твой вариант не работает.

Хм... странно, а у меня твой не работает, пробовал в справке ahk.
...
Сделал "ClipWait, 0" заработало.


На основе скрипта Malcevа, должно работать с другими приложениями:

~*MButton::
Clipboard =
Send, ^{vk43}
ClipWait, 0
if ErrorLevel
{
   var := !var
   if var
      n = 0
   else if (A_PriorKey != "MButton")
   {
      n = 0
      var := !var
   }
   else
      n = 1
   Send, {MButton %n%}
}
return
Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

22 (изменено: Malcev, 2015-01-18 11:49:22)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Вот так правильнее будет:


#InstallKeybdHook
#InstallMouseHook
MButton::
Clipboard =
Send, ^{vk43}
ClipWait, 0.1
if ErrorLevel
{
   var := !var
   if var
      Send, {MButton}
   else if (A_PriorKey != "MButton")
   {
      Send, {MButton}
      var := !var
   }
}
return

А в окошке с хелпом так:


#InstallKeybdHook
#InstallMouseHook
MButton::
Clipboard =
Send, ^{vk43}
ClipWait, 0.1
if ErrorLevel
{
   var := !var
   if var
      Send, {MButton}
   else if (A_PriorKey = "LButton") or (A_PriorKey = "RButton")
   {
      Send, {MButton 3}
      var := !var
   }
   else if (A_PriorKey != "MButton")
   {
      Send, {MButton}
      var := !var
   }
}
return

23 (изменено: dredj, 2015-01-18 11:48:52)

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Alectric, последний вариант работает везде, но если средней кнопкой жмакнуть по ссылке в браузере, то открываются сразу две вкладка.
Malcev, теперь в твоём варианте СКМ нажимается через раз.

Я в ворде тестировал.

В ворде не пробовал, но вот например в Directory Opus, SketchUp, в фубаре и ещё по мелочи, там не работает.

24

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Он работает под эту задачу:

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

25

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Да, с этой задачей скрипт справляется.
Если AHK вообще не понимает, что, что-то "выделено", то думаю просто и эффективно не получится.

26

Re: AHK: Копирования выделенного текста с помощью СКМ(MButton)

Можно проверять с помощью imagesearch есть ли значок, появляющийся при нажатии средней кнопки мыши, до посылки ctrl+c.