<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Дополнительный буферы обмена]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=11052</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11052&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Дополнительный буферы обмена».]]></description>
		<lastBuildDate>Fri, 01 Jul 2016 08:09:07 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Дополнительный буферы обмена]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=105752#p105752</link>
			<description><![CDATA[<p>Большое спасибо! Скрипт работает, но только при выключенном Num Lock на клаве.</p>]]></description>
			<author><![CDATA[null@example.com (ravensblade)]]></author>
			<pubDate>Fri, 01 Jul 2016 08:09:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=105752#p105752</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Дополнительный буферы обмена]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=98626#p98626</link>
			<description><![CDATA[<p>За оформление кода - Отл.<br />За описание работы скрипта - Хор, потому что оно размещено на стороннем ресурсе. А здесь место не экономьте - благо есть тег &quot;spoiler&quot;.<br />За оригинальность идеи... Нужно было воспользоваться <a href="http://forum.script-coding.com/search.php?advanced=1">поиском</a>. <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Mon, 02 Nov 2015 17:40:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=98626#p98626</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Дополнительный буферы обмена]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=98625#p98625</link>
			<description><![CDATA[<p>Загляните в <a href="http://forum.script-coding.com/viewtopic.php?id=10385">эту</a> тему, может будет интересно. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Mon, 02 Nov 2015 17:04:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=98625#p98625</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Дополнительный буферы обмена]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=98624#p98624</link>
			<description><![CDATA[<p>Здравствуйте! (не могу публиковать в &quot;коллекции скриптов и идей&quot;, поэтому публикую здесь)</p><p>Задача скрипта - создать дополнительные слоты текстового буфера, операбельные по Shift+Numpad[1-9] / Numpad[1-9]</p><p><a href="https://drive.google.com/open?id=0BwFIOtb0ZWSzX1paLWZxR2lReE0">Файлы проекта</a> (исходники + инструкция)</p><div class="codebox"><pre><code>;~ #Leleko #2015 - дополнительный буфер в Numpad клавишах

; Время зависания подсказок
global GNumpadBufferToolTipEventTimeout := 1000 
; Хранилище текста
global GNumpadBuffer := {}

; Shift + Numpad[1-9] - копируем в псевдобуфер
+Numpad1::
+NumpadEnd::
+Numpad2::
+NumpadDown::
+Numpad3::
+NumpadPgDn::
+Numpad4::
+NumpadLeft::
+Numpad5::
+NumpadClear::
+Numpad6::
+NumpadRight::
+Numpad7::
+NumpadHome::
+Numpad8::
+NumpadUp::
+Numpad9::
+NumpadPgUp::
{
	ParseNumpadHotKey(A_ThisHotkey, numpadKey, numpadNumber)
	SaveCurrentText(numpadNumber)
	return
}

; Numpad[1-9] - вставляем из псевдобуфера
$Numpad1::
$NumpadEnd::
$Numpad2::
$NumpadDown::
$Numpad3::
$NumpadPgDn::
$Numpad4::
$NumpadLeft::
$Numpad5::
$NumpadClear::
$Numpad6::
$NumpadRight::
$Numpad7::
$NumpadHome::
$Numpad8::
$NumpadUp::
$Numpad9::
$NumpadPgUp::
{
	ParseNumpadHotKey(A_ThisHotkey, numpadKey, numpadNumber)
	If (!RestoreSavedText(numpadNumber)){
		Send, {Crtl}{%numpadKey%}
	}
	return
}

; Получить выделенный фрагмент
GetSelectedText()
{	
	clipboardAll_old := ClipboardAll
	Clipboard =
	Send, ^{Ins}
	ClipWait 0.05
	current := Clipboard
	Clipboard := clipboardAll_old
	return current
}

; Сохранить текущий текст
; - numNumber - номер клавиши Numpad
; ! - при сохранении тескста с &#039;.&#039; на конце - она будет эмулироваться при вставке из буфера
SaveCurrentText(numNumber)
{
	selectedText := GetSelectedText()
	if (SubStr(selectedText, 0) = &quot;.&quot;){
		GNumpadBuffer[numNumber] := { endPoint: 1, text: SubStr(selectedText, 1, -1) }
	} else {
		GNumpadBuffer[numNumber] := { endPoint: 0, text: selectedText }
	}
	ToolTip % &quot;NumPad&quot; numNumber &quot; : &quot; selectedText
	SetTimer, RemoveToolTip, %GNumpadBufferToolTipEventTimeout%
	return
}

; Восстановить текст по номеру (восстановление проходит посредством буфера обмена)
; - numNumber - номер клавиши Numpad 
RestoreSavedText(numNumber)
{
	restoredItem := GNumpadBuffer[numNumber]
	if (restoredItem) {
		clipboardTmp := ClipboardAll
		Clipboard := restoredItem.text
		Send, +{Ins}		; Отправляем вставку
		If (restoredItem.endPoint = 1) {
			Send, .
		}
		Sleep 200 ; Замораживаем возврат клавиатуры
		Clipboard := clipboardTmp
		return 1
	}
	return 0
}

; Метка деактивации всплывшей подсказки
RemoveToolTip:
{
	SetTimer, RemoveToolTip, Off
	ToolTip
	return
}

; Разбор комбинации клавиши на составляющие
; numpadHotKey - A_ThisHotkey - переданная комбинация
; numpadKey - полная клавиша (Пример: Numpad7)
; numpadNumber - номер клавиши на Numpad
ParseNumpadHotKey(numpadHotKey, ByRef numpadKey, ByRef numpadNumber)
{
	numpadKey := numpadHotKey
	
	position := InStr(numpadKey, &quot;Numpad&quot;)
	numpadKey := SubStr(numpadKey, position)
	numpadNumber := SubStr(numpadKey, 7)
	
	if (StrLen(numpadNumber) &lt;&gt; 1) {
		if (numpadNumber = &quot;End&quot;) {
			numpadNumber := 1
		} else if (numpadNumber = &quot;Down&quot;) {
			numpadNumber := 2
		} else if (numpadNumber = &quot;PgDn&quot;) {
			numpadNumber := 3
		} else if (numpadNumber = &quot;Left&quot;) {
			numpadNumber := 4
		} else if (numpadNumber = &quot;Clear&quot;) {
			numpadNumber := 5
		} else if (numpadNumber = &quot;Right&quot;) {
			numpadNumber := 6
		} else if (numpadNumber = &quot;Home&quot;) {
			numpadNumber := 7
		} else if (numpadNumber = &quot;Up&quot;) {
			numpadNumber := 8
		} else if (numpadNumber = &quot;PgUp&quot;) {
			numpadNumber := 9
		}
	}
}

; Ctrl + Numpad* = Вывод общего списка всех буфера
^NumpadMult::
{
	;
	Gui, Lst:New
	Gui, Lst:font, s9, Arial
	Gui, Lst:Add, ListView, r20 w700 count9 gMyListView -Multi R9 Sort, Key|Value
	
	LV_Delete() ; Удаляем все данные
	for key, value in GNumpadBuffer
	{
		if (IsObject(value)) {
			if (value.endPoint = 1) {
				value := value.text . &quot;.&quot;
			} else {
				value := value.text
			}
		}
		LV_Add(&quot;&quot;, key, value)
	}
	
	LV_ModifyCol(1, &quot;AutoHdr Integer&quot;)  ; Номер клавиши
	LV_ModifyCol(2, &quot;AutoHdr Text&quot;)  	; Текст псевдо-буффера

	Gui, Lst:Show,, Numpad buffer
	return

	MyListView: ; События класса списка
	{
		if A_GuiEvent = DoubleClick
		{
			LV_GetText(value, A_EventInfo, 2)  ; Получаем текст псевдо-буффера
			ToolTip % value
			timeOut := GNumpadBufferToolTipEventTimeout * 2
			SetTimer, RemoveToolTip, %timeOut%
			return
		}
		return
	}
	
	LstGuiClose: ; События окна класса
	LstGuiEscape:
	{
		Gui, Destroy
		return
	}
}

; Alt + Numpad*
!NumpadMult::
{
	GNumpadBuffer.Remove(1, 9)
	ToolTip, Numpad буфер очищен
	timeOut := GNumpadBufferToolTipEventTimeout * 2
	SetTimer, RemoveToolTip, %timeOut%
	return
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (sigmov)]]></author>
			<pubDate>Mon, 02 Nov 2015 13:31:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=98624#p98624</guid>
		</item>
	</channel>
</rss>
