<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Скрипт для быстрого тестиров. кода, выложенного на Web-странице]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=2577&amp;type=atom" />
	<updated>2008-12-16T14:52:47Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=2577</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Скрипт для быстрого тестиров. кода, выложенного на Web-странице]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=17271#p17271" />
			<content type="html"><![CDATA[<p>Добавлена поддержка кодировки OEM при &quot;selectCoding=True&quot; и возможность использовать переменные окружения в INI файле (например, %windir%).<br /></p><div class="codebox"><pre><code>;======================================Секция автовыполнения=======================================

CreateINI() ; создаёт INI-файл &quot;по умолчанию&quot;, если его нет

;======================================Хоткеи======================================================

#vk54::    ; Win+T
#MButton:: ; Win+Средняя кнопка мыши
    WinGet, hwnd, ID, A
    WinGetClass, class, A
    If(class = &quot;MozillaUIWindowClass&quot; or class = &quot;IEFrame&quot; or class = &quot;OperaWindowClass&quot;)
        Gosub, CodeTesting
    Return

;======================================Метки=======================================================

CodeTesting:
    extension =
    ; Получаем список расширений:
    IniRead, exts, %A_ScriptDir%\testing.ini, general, extensions
    If(exts = &quot;ERROR&quot;)
    {
        MsgBox, Неверный формат INI-файла! Не указан параметр extensions в секции general.
        ExitApp
    }
    ; Разбираем список расширений и генерируем меню:
    Loop, parse, exts, `,
        Menu, SelectMenu, Add, %A_LoopField%, labelExtension
    Menu, SelectMenu, Show ; отображаем меню со списком расширений
    If(extension = &quot;&quot;) ; если ничего не выбрано, завершаем работу
        Return
    
    WinActivate, ahk_id%hwnd% ; активизируем окно браузера
    ClipSaved := ClipboardAll ; сохраняем содержимое буфера обмена
    Clipboard := ; очищаем буфер обмена
    SendInput, ^{vk43} ; посылаем Ctrl+C (копировать выделенное в буфер)
    ClipWait, 1 ; ждём появления данных в буфере 1 секунду
    ; Проверяем необходимость выбора кодировки:
    IniRead, selCod, %A_ScriptDir%\testing.ini, %extension%, selectCoding
    codingSel = ANSI ; кодировка по умолчанию
    If(selCod = &quot;True&quot;)
    {
        coding =
        Menu, SelectCoding, Add, UTF-8, labelCoding
        Menu, SelectCoding, Add, ANSI, labelCoding
        Menu, SelectCoding, Add, OEM, labelCoding
        Menu, SelectCoding, Show ; выбор кодировки (&quot;UTF-8&quot; или &quot;ANSI&quot;)
        If(coding = &quot;&quot;) ; если ничего не выбрано, завершаем работу
            Return
        codingSel := coding
    }
    CodeForTesting =
    If(codingSel = &quot;OEM&quot;)
        CodeForTesting := Ansi2Oem(Clipboard)
    Else If(codingSel = &quot;ANSI&quot;)
        CodeForTesting := Clipboard
    Else ; UTF-8
        Transform, CodeForTesting, Unicode
    Clipboard := ClipSaved ; восстановление содержимого буфера
    If(CodeForTesting = &quot;&quot;)
    {
        MsgBox, Не обнаружен код для тестирования! Возможно, при запуске не было ничего выделено.
        Return
    }
    
    ; Получаем папку для расположения скриптов:
    IniRead, fold, %A_ScriptDir%\testing.ini, general, folder
    fold := ExpandEnv(fold)
    If(fold = &quot;ERROR&quot;)
    {
        MsgBox, Неверный формат INI-файла! Не указан параметр folder в секции general.
        ExitApp
    }
    FileCreateDir, %fold% ; создаём папку, если её нет
    FileDelete, %fold%\test.%extension% ; удаляем файл, если он есть
    FileAppend, %CodeForTesting%, %fold%\test.%extension% ; записываем файл
    
    ; Получаем путь к текстовому редактору:
    IniRead, ed, %A_ScriptDir%\testing.ini, %extension%, editor
    ed := ExpandEnv(ed)
    If(ed = &quot;ERROR&quot;)
    {
        MsgBox, Неверный формат INI-файла! Не указан параметр editor в секции %extension%.
        ExitApp
    }
    Run, %ed% &quot;%fold%\test.%extension%&quot; ; запускаем текстовый редактор
    
    ; Получаем путь к файловому менеджеру:
    IniRead, fileman, %A_ScriptDir%\testing.ini, %extension%, filemanager
    fileman := ExpandEnv(fileman)
    If(fileman != &quot;ERROR&quot;)
        Run, %fileman% &quot;%fold%\test.%extension%&quot; ; запускаем файловый менеджер
    
    ; Проверяем необходимость запуска cmd.exe:
    IniRead, commd, %A_ScriptDir%\testing.ini, %extension%, cmd
    If(commd = &quot;True&quot;)
        Run, %comspec% /k cd %fold% ; запускаем cmd.exe
    
    Return

labelExtension:
    extension = %A_ThisMenuItem%
    Return

labelCoding:
    coding = %A_ThisMenuItem%
    Return

;======================================Функции=====================================================

; Создаёт INI-файл &quot;по умолчанию&quot;, если его нет.
CreateINI()
{
    IfNotExist, %A_ScriptDir%\testing.ini
    {
        FileAppend,
        (
[general]
folder=C:\Temp\Testing
extensions=ahk,bat,cmd,css,html,hta,js,mf,py,pyw,vbs,wsf

[ahk]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[bat]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True

[cmd]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True

[css]
editor=&quot;%windir%\notepad.exe&quot;

[html]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[hta]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[js]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
filemanager=explorer /select,

[py]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
selectCoding=True

[pyw]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,
selectCoding=True

[mf]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[vbs]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
filemanager=explorer /select,

[wsf]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
filemanager=explorer /select,

), %A_ScriptDir%\testing.ini
    }
}

; Разворачивает переменные среды в переданной строке.
; Незакрытые &quot;%&quot; не проверяются.
ExpandEnv(str)
{
    res := &quot;&quot;
    Loop, parse, str, `%
    {
        EnvGet, env, %A_LoopField%
        If(env = &quot;&quot;)
            res := res . A_LoopField
        Else
            res := res . env
    }
    Return, res
}

; Преобразует строку ANSI к OEM.
Ansi2Oem(sString)
{
    Ansi2Unicode(sString, wString, 0)
    Unicode2Ansi(wString, zString, 1)
    Return, zString
}

Ansi2Unicode(ByRef sString, ByRef wString, CP = 0)
{
    nSize := DllCall(&quot;MultiByteToWideChar&quot;
        , &quot;Uint&quot;, CP
        , &quot;Uint&quot;, 0
        , &quot;Uint&quot;, &amp;sString
        , &quot;int&quot;,  -1
        , &quot;Uint&quot;, 0
        , &quot;int&quot;,  0)
    VarSetCapacity(wString, nSize * 2)
    DllCall(&quot;MultiByteToWideChar&quot;
        , &quot;Uint&quot;, CP
        , &quot;Uint&quot;, 0
        , &quot;Uint&quot;, &amp;sString
        , &quot;int&quot;,  -1
        , &quot;Uint&quot;, &amp;wString
        , &quot;int&quot;,  nSize)
}

Unicode2Ansi(ByRef wString, ByRef sString, CP = 0)
{
    nSize := DllCall(&quot;WideCharToMultiByte&quot;
        , &quot;Uint&quot;, CP
        , &quot;Uint&quot;, 0
        , &quot;Uint&quot;, &amp;wString
        , &quot;int&quot;,  -1
        , &quot;Uint&quot;, 0
        , &quot;int&quot;,  0
        , &quot;Uint&quot;, 0
        , &quot;Uint&quot;, 0)
    VarSetCapacity(sString, nSize)
    DllCall(&quot;WideCharToMultiByte&quot;
        , &quot;Uint&quot;, CP
        , &quot;Uint&quot;, 0
        , &quot;Uint&quot;, &amp;wString
        , &quot;int&quot;,  -1
        , &quot;str&quot;,  sString
        , &quot;int&quot;,  nSize
        , &quot;Uint&quot;, 0
        , &quot;Uint&quot;, 0)
}</code></pre></div><p>Во вложении поста - откомпилированная версия скрипта (standalone executable, не требует инсталляции).</p>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-12-16T14:52:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=17271#p17271</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Скрипт для быстрого тестиров. кода, выложенного на Web-странице]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=17178#p17178" />
			<content type="html"><![CDATA[<p>Скрипт для быстрого тестирования скриптового (или аналогичного) кода, выложенного на Web-страницах, например, на страницах форумов.</p><p>Скрипт помогает автоматизировать следующие действия: скопировать выделенный в браузере код в буфер, создать временный текстовый файл на диске с нужным расширением, открыть файл в выбранном текстовом редакторе, вставить туда код, а при необходимости ещё открыть выбранный файловый менеджер и/или командный интерпретатор на каталоге с этим временным файлом. Настроен для работы только в браузерах (FF, IE, Опера).</p><p>Использование: выделить в браузере текстовый фрагмент, нажать Win+T или Win+Средняя кнопка мыши, выбрать расширение, затем, при необходимости, выбрать кодировку.</p><p>Все настройки осуществляются через <strong>testing.ini</strong>, который должен лежать рядом со скриптом. При первом запуске testing.ini будет автоматически создан, если его нет. Структура testing.ini - ниже.</p><p>Секция [general] обязательна:<br />&nbsp; &nbsp; * параметр &quot;folder&quot; должен присутствовать обязательно и содержать путь к каталогу временных файлов для создания временных файлов скриптов;<br />&nbsp; &nbsp; * параметр &quot;extensions&quot; должен присутствовать обязательно и содержать все нужные расширения, разделённые запятыми; для каждого расширения ниже обязательно должна присутствовать одноимённая секция.</p><p>Секция [имя_расширения]:<br />&nbsp; &nbsp; * параметр &quot;editor&quot; должен присутствовать обязательно и содержать путь к текстовому редактору, можно с дополнительными параметрами командной строки;<br />&nbsp; &nbsp; * параметр &quot;filemanager&quot; опционален и обеспечивает запуск файлового менеджера; должен содержать путь к файловому менеджеру, можно с дополнительными параметрами командной строки;<br />&nbsp; &nbsp; * параметр &quot;cmd=True&quot; опционален и обеспечивает запуск командного интерпретатора;<br />&nbsp; &nbsp; * параметр &quot;selectCoding=True&quot; опционален и обеспечивает выбор кодировки (&quot;UTF-8&quot; или &quot;ANSI&quot;) для создания файла; если его нет, файл создаётся в кодировке ANSI.<br /></p><div class="codebox"><pre><code>;======================================Секция автовыполнения=======================================

CreateINI() ; создаёт INI-файл &quot;по умолчанию&quot;, если его нет

;======================================Хоткеи======================================================

#vk54::    ; Win+T
#MButton:: ; Win+Средняя кнопка мыши
    WinGet, hwnd, ID, A
    WinGetClass, class, A
    If(class = &quot;MozillaUIWindowClass&quot; or class = &quot;IEFrame&quot; or class = &quot;OperaWindowClass&quot;)
        Gosub, CodeTesting
    Return

;======================================Метки=======================================================

CodeTesting:
    extension =
    ; Получаем список расширений:
    IniRead, exts, %A_ScriptDir%\testing.ini, general, extensions
    If(exts = &quot;ERROR&quot;)
    {
        MsgBox, Неверный формат INI-файла! Не указан параметр extensions в секции general.
        ExitApp
    }
    ; Разбираем список расширений и генерируем меню:
    Loop, parse, exts, `,
    {
        Menu, SelectMenu, Add, %A_LoopField%, labelExtension
    }
    Menu, SelectMenu, Show ; отображаем меню со списком расширений
    If(extension = &quot;&quot;) ; если ничего не выбрано, завершаем работу
    {
        Return
    }
    
    WinActivate, ahk_id%hwnd% ; активизируем окно браузера
    ClipSaved := ClipboardAll ; сохраняем содержимое буфера обмена
    Clipboard := ; очищаем буфер обмена
    SendInput, ^{vk43} ; посылаем Ctrl+C (копировать выделенное в буфер)
    ClipWait, 1 ; ждём появления данных в буфере 1 секунду
    ; Проверяем необходимость выбора кодировки:
    IniRead, selCod, %A_ScriptDir%\testing.ini, %extension%, selectCoding
    codingSel = ANSI ; кодировка по умолчанию
    If(selCod = &quot;True&quot;)
    {
        coding =
        Menu, SelectCoding, Add, UTF-8, labelCoding
        Menu, SelectCoding, Add, ANSI, labelCoding
        Menu, SelectCoding, Show ; выбор кодировки (&quot;UTF-8&quot; или &quot;ANSI&quot;)
        If(coding = &quot;&quot;) ; если ничего не выбрано, завершаем работу
        {
            Return
        }
        codingSel := coding
    }
    CodeForTesting =
    If(codingSel = &quot;ANSI&quot;)
    {
        CodeForTesting := Clipboard
    }
    Else ; UTF-8
    {
        Transform, CodeForTesting, Unicode
    }
    Clipboard := ClipSaved ; восстановление содержимого буфера
    If(CodeForTesting = &quot;&quot;)
    {
        MsgBox, Не обнаружен код для тестирования! Возможно, при запуске не было ничего выделено.
        Return
    }
    
    ; Получаем папку для расположения скриптов:
    IniRead, fold, %A_ScriptDir%\testing.ini, general, folder
    If(fold = &quot;ERROR&quot;)
    {
        MsgBox, Неверный формат INI-файла! Не указан параметр folder в секции general.
        ExitApp
    }
    FileCreateDir, %fold% ; создаём папку, если её нет
    FileDelete, %fold%\test.%extension% ; удаляем файл, если он есть
    FileAppend, %CodeForTesting%, %fold%\test.%extension% ; записываем файл
    
    ; Получаем путь к текстовому редактору:
    IniRead, edit, %A_ScriptDir%\testing.ini, %extension%, editor
    If(edit = &quot;ERROR&quot;)
    {
        MsgBox, Неверный формат INI-файла! Не указан параметр editor в секции %extension%.
        ExitApp
    }
    Run, %edit% &quot;%fold%\test.%extension%&quot; ; запускаем текстовый редактор
    
    ; Получаем путь к файловому менеджеру:
    IniRead, fileman, %A_ScriptDir%\testing.ini, %extension%, filemanager
    If(fileman != &quot;ERROR&quot;)
    {
        Run, %fileman% &quot;%fold%\test.%extension%&quot; ; запускаем файловый менеджер
    }
    
    ; Проверяем необходимость запуска cmd.exe:
    IniRead, commd, %A_ScriptDir%\testing.ini, %extension%, cmd
    If(commd = &quot;True&quot;)
    {
        Run, %comspec% /k cd %fold% ; запускаем cmd.exe
    }
    
    Return

labelExtension:
    extension = %A_ThisMenuItem%
    Return

labelCoding:
    coding = %A_ThisMenuItem%
    Return

;======================================Функции=====================================================

; Создаёт INI-файл &quot;по умолчанию&quot;, если его нет.
CreateINI()
{
    IfNotExist, %A_ScriptDir%\testing.ini
    {
        FileAppend,
        (
[general]
folder=C:\Temp\Testing
extensions=ahk,bat,cmd,css,html,hta,js,mf,py,pyw,vbs,wsf

[ahk]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[bat]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True

[cmd]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True

[css]
editor=&quot;%windir%\notepad.exe&quot;

[html]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[hta]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[js]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
filemanager=explorer /select,

[py]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
selectCoding=True

[pyw]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,
selectCoding=True

[mf]
editor=&quot;%windir%\notepad.exe&quot;
filemanager=explorer /select,

[vbs]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
filemanager=explorer /select,

[wsf]
editor=&quot;%windir%\notepad.exe&quot;
cmd=True
filemanager=explorer /select,

), %A_ScriptDir%\testing.ini
    }
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[The gray Cardinal]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=2</uri>
			</author>
			<updated>2008-12-15T10:22:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=17178#p17178</id>
		</entry>
</feed>
