<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AutoHotkey: использование кнопки мыши вместо кнопки Ctrl]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=281</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=281&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AutoHotkey: использование кнопки мыши вместо кнопки Ctrl».]]></description>
		<lastBuildDate>Fri, 12 Jan 2007 08:12:28 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AutoHotkey: использование кнопки мыши вместо кнопки Ctrl]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=1637#p1637</link>
			<description><![CDATA[<p>P.S. Забыл отметить, что скрипт написан для AutoHotkey версии 1.0.46 (ноябрь прошлого года) и с более ранними версиями работать не будет.</p>]]></description>
			<author><![CDATA[null@example.com (Ludens)]]></author>
			<pubDate>Fri, 12 Jan 2007 08:12:28 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=1637#p1637</guid>
		</item>
		<item>
			<title><![CDATA[AutoHotkey: использование кнопки мыши вместо кнопки Ctrl]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=1627#p1627</link>
			<description><![CDATA[<p>Исторически сложилось так, что большинство САМЫХ ГЛАВНЫХ по частоте употребления горячих клавишей в программах под Windows представляют собой комбинацию Ctrl с какой-либо, преимущественно буквенной, клавишей. В алфавитно-цифровые времена это было оправдано и удобно: обе руки постоянно находились над клавиатурой, и было легко мизинцем одной из них давить Ctrl, а пальцем другой — нужную букву. С появлением графического интерфейса ситуация кардинально изменилась: теперь правая рука значительную (у непродвинутых юзеров — бОльшую) часть времени проводит не на клавиатуре, а на мыши. Но традиционные горячие клавиши, тем не менее, все сохранились — от неизбежных Ctrl-C, Ctrl-V, Ctrl-A, Ctrl-Z, Ctrl-S до новомодных Ctrl-Tab, Ctrl-W, Ctrl-T, Ctrl-Enter и т. д.! И теперь приходится либо «гнуть пальцы», пытаясь нажимать эти комбинации одной левой, либо дергаться правой рукой с мыши на клавиатуру и обратно. Для сторонников «слепого метода», предполагающего принципиальный отказ от даже беглого взгляда на клавиатуру в целях поиска нужной клавиши, эта ситуация невыносима. <br />Между тем, ее можно почти кардинально разрешить, если позволить левой кнопке мыши работать как Ctrl! Это ничему не противоречит и ничему не мешает. Смотрите, как выглядит в этих условиях, например, операция копипейстинга слова в текстовом редакторе. Выделяем двойным кликом нужное слово, но после второго клика не отпускаем кнопку мыши, а, оставив ее нажатой, давим средним пальцем левой рукой кнопку C, не глядя на клавиатуру. Получилось Copy. Затем мышью помещаем курсор в нужное место, но после однократного клика, опять-таки, не отпускаем кнопку мыши, а вслепую жмем указательным пальцем левой руки клавишу V. Вышло Paste.<br />И так для любой операции по нажатию Ctrl-кнопка!<br />Так вот, благодаря AutoHotkey, назначения Ctrl-X на LeftButton-X, где X — любая клавиша, можно добиться всего одной короткой строчкой кода: <br /></p><div class="codebox"><pre><code>~LButton &amp; x::Send ^x</code></pre></div><p>Для русскоязычных пользователей эта строчка нуждается в небольшой коррекции:<br /></p><div class="codebox"><pre><code>~LButton &amp; sc02D::Send ^{sc02D} ; используем вместо x ее сканкод 02D</code></pre></div><p>(О необходимости применении сканкодов прекрасно и исчерпывающе написано <a href="http://script-coding.com/AutoHotkey/AhkRussian_3b.html">здесь</a>.)<br />Проблема, таким образом, принципиально решена. Но вот беда: разных Ctrl-клавишей, переназначенных подобным способом, необходимы ДЕСЯТКИ. И что же теперь — писать для каждой из них отдельную строчку? Это длинно и некрасиво. Однако, AutoHotkey, к сожалению, не позволяет использовать в качестве задания для горячей клавиши ФУНКЦИЮ: в этом качестве может фигурировать только ПОДПРОГРАММА! Возможно, в будущих версиях великий Крис Маллет ликвидирует этот недостаток, но пока он есть.<br />И я долго мучился в попытках его преодолеть. В конце концов таки преодолел! Решение получилось на диво кратким и, не побоюсь этого слова, красивым. Вот оно (поместите нижеследующий код в файл, например, LButtonCtrl.ahk, и запустите его дабл-кликом — при установленном AutoHotkey, разумеется):<br /></p><div class="codebox"><pre><code>#NoEnv ; стартовая мантра
SendMode Input

; список скан-кодов (разделенных знаком |) тех клавишей X (указаны в комментах),
; которые при нажатии LButton-X должны давать тот же результат, что и Ctrl-X
XKeys = 
(C Join| ; разрешить комменты в continuation section и связать строки знаком |
01E|02C|02D|02E|02F ; AZXCV
020|01F|031|025 ; DSNK
010|011|012|013|014|015|016|017|018|019 ; QWERTYUIOP
039|00F|01C|147|14F ; {Space}{Tab}{Enter}{Home}{End}
)
Loop Parse, XKeys, | ; назначаем каждому LButton-X ОДНУ И ТУ ЖЕ подпрограмму
  HotKey ~LButton &amp; sc%A_LoopField%, CtrlX
CtrlX: ; подпрограмма превращения LButton-X в Ctrl-X
  X := SubStr(A_ThisHotKey, StrLen(A_ThisHotKey)-3) ; извлекаем сканкод X
  Send {Click up}^{sc%X%} ; и используем его для эмуляции Ctrl-X
return</code></pre></div><p>Эта идея может быть использована и для любых других множественных (в цикле) переназначений горячих клавишей в AutoHotkey.</p>]]></description>
			<author><![CDATA[null@example.com (Ludens)]]></author>
			<pubDate>Thu, 11 Jan 2007 09:39:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=1627#p1627</guid>
		</item>
	</channel>
</rss>
