<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AutoHotkey и Total Commander: удобное выделение имени в некотор. окнах]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=162</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=162&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AutoHotkey и Total Commander: удобное выделение имени в некотор. окнах».]]></description>
		<lastBuildDate>Thu, 28 Sep 2006 19:25:17 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AutoHotkey и Total Commander: удобное выделение имени в некотор. окнах]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=717#p717</link>
			<description><![CDATA[<p>Некоторые юзеры TC делают (скриптами) автоматическое нажатие кнопки ОК в окнах копирования/перемещения. Я - нет. И одна из причин такая: эти окна позволяют всякие расширенные функции. Например, можно скопировать/переместить файл/папку под новым именем. Лично я нахожу это удобным. Скажем, принес я от друга кучу фильмов на CD, а они (фильмы) все поголовно называются &quot;videoout.avi&quot;. Можно, разумеется сначала его скопировать на хард, а затем переименовать, но мне удобнее переименовывать прямо в процессе копирования (в этих самых окнах копирования/перемещения). Однако есть одно неудобство: имя файла нужно сначала выделить. С клавы это делать очень неудобно. Мышью удобнее, но за неё нужно сначала взяться, потом как следует прицелиться, а потом бросить мышь, и начать вводить новое имя (я печатаю обеими руками). Неудобно - факт.<br />Вот я и накатал скриптец для выделения имени. <strong>Работает так</strong>: нажимаем в Тотале F5 (обычная гор.клавиша для копирования), и в появившемся окне копирования снова нажимаем F5. Имя (без расширения) выделилось. Теперь можно сразу вводить новое имя (выделенное будет удалено). Или нажать какую-нибудь из стрелок (на клаве, разумеется) и выделение будет снято, а курсор останется в конце имени. Теперь к имени можно дописать просто номер или что-то другое. То же самое и с папками. Очень удобно.<br /><strong>Эта фича работает в окнах копирования, перемещения, упаковки, переименования, копирования в ту же панель.</strong> Возможно, вы добавите ещё какие-нибудь окна.<br />Фишка не работает, если копируются/перемещаются несколько файлов/папок за раз, но это ограничения самого Тотала (я где-то читал, что в седьмой версии эти ограничения будут сняты).<br />Вот, короче, скриптец.<br /></p><div class="codebox"><pre><code>;*******************************************************************************
; AutoHotkey Version:   1.0.44.09+
; Автор:                Androgen Belkin
; Имя скрипта:          TCNameSelect.ahk (v.1.5)
;*******************************************************************************
; Выделение имени в окнах копирования, перемещения, упаковки, переименования в ТС.
;*******************************************************************************
;~ #NoTrayIcon ; не отображать иконку скрипта в трее
#NoEnv         ; запрещаем имена переменных как у переменных окружения (повышаем производительность скрипта)
SendMode Input ; новый режим высылки без задержки и повышенной надежности

; ========== НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ ===============
Total_Copy_Move_Other = TInpComboDlg|TCheckEditBox|TDLGZIP|TSTDTREEDLG ; окна, где вы хотите такую фишку
; список обрабатываемых окон (1 копир-е/перемещ-е, 2 копир-е в ту же панель, 3 упаковка, 4 переименование)
; ========== КОНЕЦ НАСТРОЕК ПОЛЬЗОВАТЕЛЯ ==========
Loop, parse, Total_Copy_Move_Other, | ; обработать список окон для обработки (разделитель - &quot;|&quot;)
    GroupAdd, TC_WinGroup, ahk_class %A_LoopField% ; добавляем все указанные окна в группу

;-----------------------------------------------------------------------------
~F5:: ; F5 - выделение имени в окнах копирования, перемещения, упаковки, переименования в ТС
;-----------------------------------------------------------------------------
IfWinActive, ahk_group TC_WinGroup ; если активно к-либо окно из группы, то...
{
    ControlGetText, Text_From_Control, TEdit1, ahk_group TC_WinGroup ; получить текст из контрола
    SplitPath, Text_From_Control,,, Ext, Name_No_Ext ; получить из строки имя и расширение
    Send, % &quot;{END}{LEFT &quot; StrLen( Ext ) + StrLen( Name_No_Ext ) + 1 &quot;}&quot; ; переместить курсор к началу имени
    IfInString, Text_From_Control, *.* ; если обрабатываемое имя - имя папки, или выделено несколько файлов, то...
        Send, +{END} ; выделить имя    целиком (прихватив &quot;расширение&quot; &quot;*&quot;)
    Else
        Send, % &quot;+{RIGHT &quot; StrLen( Name_No_Ext ) &quot;}&quot; ; выделить только имя
}
Return ; закончить обработку горячей клавиши
;-----------------------------------------------------------------------------

;-----------------------------------------------------------------------------
#IfWinActive, ahk_group TC_WinGroup ; если активное окно из назначенной группы ТС, то...
;-----------------------------------------------------------------------------
    ~Right:: Check_Sel( &quot;Left&quot; ) ; снимаем выделение, перемещая курсор, и возвращаем курсор назад
    ~Left:: Check_Sel( &quot;Right&quot; ) ; снимаем выделение, перемещая курсор, и возвращаем курсор назад
    ~Down:: Check_Sel( &quot;Left&quot; ) ; снимаем выделение, перемещая курсор, и возвращаем курсор назад
    ~Up:: Check_Sel( &quot;Right&quot; ) ; снимаем выделение, перемещая курсор, и возвращаем курсор назад
;-----------------------------------------------------------------------------
    Check_Sel( Key ) ; функция корректировки положения курсора в зависимости от наличия выделения
    {
        BatchLinesBefore = %A_BatchLines% ; запоминаем текущую скорость выполнения скрипта
        SetBatchLines, -1 ; ставим макс. скорость
        VarSetCapacity( Sel_Start, 4 ) ; обеспечиваем вместимость переменной для 32-битного целого числа
        VarSetCapacity( Sel_End, 4 ) ; обеспечиваем вместимость переменной для 32-битного целого числа
        ; 0xB0 = EM_GETSEL
        SendMessage 0xB0, &amp;Sel_Start, &amp;Sel_End, TEdit1, ahk_group TC_WinGroup ; получаем выделение в окне (синтаксис адресации)
        Sel_Start := *( &amp;Sel_Start ) + ( *( &amp;Sel_Start + 1 ) &lt;&lt; 8 ) ; получаем начало выделения (номер символа)
        Sel_End := *( &amp;Sel_End ) + ( *( &amp;Sel_End + 1 ) &lt;&lt; 8 ) ; получаем конец выделения (номер символа)
        ControlGetText, Text_From_Control, TEdit1, ahk_group TC_WinGroup ; получить текст из контрола
        If ( Sel_Start != Sel_End ) ; если что-то выделено, то...
            Send, {%Key%} ; корректируем положение курсора (возвращаем его назад после сдвига горячей клавишей)
        If ( Sel_End = StrLen( Text_From_Control ) AND Key = &quot;Left&quot;) ; если курсор был в конце и была нажата клавиша Right, то...
            Send, {Right} ; отменяем предыдущую коррекцию положения курсора (возвращаем его на место)
        SetBatchLines, %BatchLinesBefore% ; возвращаем прежнюю скорость выполнения скрипта
    } ; конец функции
;-----------------------------------------------------------------------------</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Androgen)]]></author>
			<pubDate>Thu, 28 Sep 2006 19:25:17 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=717#p717</guid>
		</item>
	</channel>
</rss>
