<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AutoHotkey: Копирование/вырезание/вставка текста средней кнопкой мыши]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=237</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=237&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AutoHotkey: Копирование/вырезание/вставка текста средней кнопкой мыши».]]></description>
		<lastBuildDate>Tue, 12 Dec 2006 06:51:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AutoHotkey: Копирование/вырезание/вставка текста средней кнопкой мыши]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=1265#p1265</link>
			<description><![CDATA[<p>Исходная идея взята здесь: <a href="http://www.autohotkey.com/forum/topic463.html">Cut and paste with the mouse.</a> , но реализована иначе.<br />Сначала более простой пример. Удерживая среднюю кнопку мыши, выделяем кусок текста, и он автоматически копируется в буфер обмена. Щелчок средней кнопкой вставляет фрагмент из буфера в точку, где находится курсор мыши.<br /></p><div class="codebox"><pre><code>MButton::
  Click down             ; Имитация нажатия левой кнопки.
  MouseGetPos, x1, y1    ; Взять начальные координаты мыши.
  KeyWait, MButton       ; Ждать отпускания средней кнопки.
  Click up               ; Имитация отпускания левой кнопки.
  MouseGetPos, x2, y2    ; Конечные координаты мыши.
  dx:=Abs(x1-x2)         ; Смещения по осям X и Y.
  dy:=Abs(y1-y2)
  if (dx&gt;1.5 || dy&gt;10)   ; Чтобы отличить щелчок от выделения.
    Send, ^{vk43}        ; Ctrl-C, копирование.
  else
    Send, ^{vk56}        ; Ctrl-V, вставка.
Exit</code></pre></div><p>Есть, как водится, и недостатки: не получится вставить средней кнопкой фрагмент текста из буфера <strong>вместо</strong> какого-то выделенного фрагмента. При щелчке выделение будет сброшено и вставка произойдёт в точку, где окажется текстовый курсор.</p><br /><p>В следующем примере эта проблема решена - за счёт использования колеса. Теперь, если после выделения текста отпускаем кнопку, фрагмент по-прежнему копируется в буфер. Но если, не отпуская кнопки, повернуть колесо вверх (от себя), текст из буфера будет вставлен вместо выделенного фрагмента. Если колесо повернуть вниз, выделенный фрагмент вырезается в буфер. Как и раньше, работает вставка щелчком средней кнопки.<br /></p><div class="codebox"><pre><code>MButton::
  Quit=0                 ; Добавлена для взаимодействия.
  Click down             ; Имитация нажатия левой кнопки.
  MouseGetPos, x1, y1    ; Взять начальные координаты мыши.
  KeyWait, MButton       ; Ждать отпускания средней кнопки.
  if Quit
    Exit
  Click up               ; Имитация отпускания левой кнопки.
  MouseGetPos, x2, y2    ; Конечные координаты мыши.
  dx:=Abs(x1-x2)         ; Смещения по осям X и Y.
  dy:=Abs(y1-y2)
  if (dx&gt;1.5 || dy&gt;10)   ; Чтобы отличить щелчок от выделения.
    Send, ^{vk43}        ; Ctrl-C, копирование.
  else
    Send, ^{vk56}        ; Ctrl-V, вставка.
Exit

WheelUp::
  if GetKeyState(&quot;MButton&quot;, &quot;P&quot;)  ; Нажата ли средняя кнопка.
  {
    Click up             ; Имитация отпускания левой кнопки в конце выделения.
    Send, ^{vk56}        ; Ctrl-V, вставить.
    Quit=1               ; Сигнал завершения работы.
  }
  else Send, {WheelUp}   ; Если кнопка не нажата, колесо работает как обычно.
Exit

WheelDown::
  if GetKeyState(&quot;MButton&quot;, &quot;P&quot;)
  {
    Click up
    Send, ^{vk58}        ; Ctrl-X, вырезать.
    Quit=1
  }
  else Send, {WheelDown}
Exit</code></pre></div><p>Опять есть оборотная сторона: колесо вращается легко, а кнопка нажимается с усилием. Так что возможны ошибки из-за лишних движений - вставка вместо копирования и т.п. При вставке щелчком курсор надо держать неподвижно. В общем, желательна точность движений.<br />Чувствительность по оси X можно, впрочем, уменьшить, увеличив порог для dx. Я сделал его 1,5 пиксела, чтобы можно было копировать/вырезать отдельные буквы, знаки препинания. Возможно, это и ни к чему.<br />Если, нажав кнопку для вставки, видите, что курсор оказался не совсем там, где надо, поверните колесо вниз, тогда ничего не вставится и фрагмент в буфере не потеряется.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Tue, 12 Dec 2006 06:51:55 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=1265#p1265</guid>
		</item>
	</channel>
</rss>
