<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: помощник в работе с командной строкой (в Total Commander'е)]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=116</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=116&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: помощник в работе с командной строкой (в Total Commander'е)».]]></description>
		<lastBuildDate>Sun, 27 Aug 2006 00:40:01 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[AHK: помощник в работе с командной строкой (в Total Commander'е)]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=379#p379</link>
			<description><![CDATA[<p>Помощь этого скрипта в том, что он <strong>показывает командную строку с которой его запустили</strong>. На мой взгляд очень полезный инструмент. Вот, допустим, сделали вы для запуска приложения кнопочку в Total Commander&#039;е, и в кнопочке же прописали какие-нить Тоталовские параметры (ну, там %M	%O и т.д.). Вроде все правильно написали, а ожидаемых действий не получается. Тут вы берете, и вместо запускаемого приложения прописываете предлагаемый скрипт. И когда нажмете на созданную кнопочку, то скрипт покажет полученные параметры. И становится видно что не так: а-а, кавычки забыл поставить, или символ процента не экранировал, или... да мало ли в чем можно ошибиться. Понятное дело, область применения Тоталом не ограничивается. Собственно, на написание скрипта меня сподвигла одна прожка, которая в качестве стороннего инструмента вызывала другую прожку, передавая ей некие параметры. А эта другая прожка не запускается и всё тут. Бился я, бился. Да и накатал скрипт. Смотрю: а в передаваемых первой прожкой параметрах, лишний бэкслэш. Во-о-от оно в чем дело, подумал я, да и написал автору прожки (тот и поправил этот дурацкий баг).<br />Если при использовании в каком-нить приложении столкнетесь с тем, что скрипт не запускается (немало прог, желающих запускать только exe&#039;шники, и не желающих - скрипты), то можно либо откомпилировать скрипт в exe&#039;шник, либо прописать так: &quot;D:\Program_2\AutoHotkey\AutoHotkey.exe&quot; &quot;D:\Program_2\AutoHotkey\HScripts\GetCommandLine(-ScriptInfo).ahk&quot; (пути, разумеется, указать свои). А дальше уже вписывать всякие нужные вам параметры.<br />На самом деле, скрипта два. Первый - не содержит командную строку, выполняемую операционной системой для запуска самого скрипта (примерно такую, что я написал выше). Второй скрипт показывает всю командную строку полностью. Его можно использовать в познавательных целях <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.<br />Можно было сделать проще (без GUI и настроек пользователя), но зачем же проще, если можно <strong>лучше</strong>.</p><p><strong>Основной скрипт:</strong></p><div class="codebox"><pre><code>;*******************************************************************************
; AutoHotkey Version:   1.0.44.09+
; Автор:                Androgen Belkin
; Имя скрипта:          GetCommandLine(-ScriptInfo).ahk (v.1.0)
;*******************************************************************************
; Получение командной строки для текущего процесса.
; (НЕ содержит информацию и о ком. строке самого скрипта).
;*******************************************************************************
#NoTrayIcon           ; не отображать иконку скрипта в трее
#NoEnv                ; запрещаем имена переменных как у переменных окружения
#SingleInstance force ; перезагрузить скрипт, если он уже запущен

; ========== НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ ===============
ExpandEnvVars = 1 ; разворачивать ли встреченные в ком. строке переменные окружения или показывать как есть (1 - разворачивать)
; ========== КОНЕЦ НАСТРОЕК ПОЛЬЗОВАТЕЛЯ ==========

Command_Line := DllCall( &quot;GetCommandLine&quot;, str ) ; получить командную строку для текущего процесса

; строка ниже - удаляет инфу самого скрипта, и показывает оставшиеся параметры
StringMid, Command_Line, Command_Line, InStr( Command_Line, A_ScriptFullPath ) + StrLen( A_ScriptFullPath ) + 2
    , StrLen( Command_Line ) ; отрезать начало командной строки (путь к AutoHotkey.exe+имя скрипта+кавычка+пробел)

If ExpandEnvVars = 1 ; если указано разворачивать переменные окружения, то...
    Command_Line := ExpandEnvVars( Command_Line ) ; вызываем функцию по разворачиванию переменных окружения
    
IF Not Command_Line
    Text_Caption = Командная строка пуста!
Else
    Text_Caption = Получена следующая командная строка:

Gui, +LastFound ; делаем окно GUI последним найденным
Gui, Add, Text, Center, %Text_Caption% ; добавляем заголовок строки (со свойством текста &quot;по центру&quot;)
Gui, Add, Edit, ReadOnly vMyEdit, %Command_Line% ; добавляем поле редактирования (только для чтения)
Gui, Add, Button, Default w75 h23 gMyButton, &amp;OK ; добавляем кнопку &quot;ОК&quot; с заданными размерами
Gui, Show, Hide ; создаем окно в скрытом виде
WinGetPos,,, Gui_Width ; получить ширину окна
GuiControl, Move, Static1, % &quot;w&quot; Gui_Width - 24 ; поместить заголовок строки по центру ширины
GuiControl, Move, Edit1, % &quot;w&quot; Gui_Width - 24 ; поместить поле с командной строкой по центру ширины
GuiControl, Move, Button1, % &quot;x&quot; Gui_Width/2 - 75/2 - 3 ; поместить кнопку &quot;ОК&quot; по центру ширины
Gui, Show ; показываем окно
Return ; закончить секцию автовыполнения

GuiClose: ; при нажатии кнопки закрытия окна
GuiEscape: ; при нажатии кнопки ESC
MyButton: ; при нажатии кнопки &quot;ОК&quot;
ExitApp ; закончить скрипт
Return ; закончить обработку горячей клавиши

ExpandEnvVars( ppath ) ; функция по разворачиванию переменных окружения в их содержание
{
    VarSetCapacity( Dest, 2000 ) ; обеспечиваем достаточную вместимость переменной
    DllCall( &quot;ExpandEnvironmentStrings&quot;, Str, ppath, Str, Dest, Int, 1998 ) ; получаем содержание п. окруж-я
    Return, Dest ; возвращаем содержание переменной окружения
}</code></pre></div><p><strong>Дополнительный (познавательный) скрипт:</strong></p><div class="codebox"><pre><code>;*******************************************************************************
; AutoHotkey Version:   1.0.44.09+
; Автор:                Androgen Belkin
; Имя скрипта:          GetCommandLineFull.ahk (v.1.0)
;*******************************************************************************
; Получение командной строки для текущего процесса.
; (Содержит информацию и о ком. строке самого скрипта).
;*******************************************************************************
#NoTrayIcon           ; не отображать иконку скрипта в трее
#NoEnv                ; запрещаем имена переменных как у переменных окружения
#SingleInstance force ; перезагрузить скрипт, если он уже запущен

; ========== НАСТРОЙКИ ПОЛЬЗОВАТЕЛЯ ===============
ExpandEnvVars = 1 ; разворачивать ли встреченные в ком. строке переменные окружения или показывать как есть (1 - разворачивать)
; ========== КОНЕЦ НАСТРОЕК ПОЛЬЗОВАТЕЛЯ ==========

Command_Line := DllCall( &quot;GetCommandLine&quot;, str ) ; получить командную строку для текущего процесса

If ExpandEnvVars = 1 ; если указано разворачивать переменные окружения, то...
    Command_Line := ExpandEnvVars( Command_Line ) ; вызываем функцию по разворачиванию переменных окружения

Gui, +LastFound ; делаем окно GUI последним найденным
Gui, Add, Text, Center, Получена следующая командная строка: ; добавляем заголовок строки (со свойством текста &quot;по центру&quot;)
Gui, Add, Edit, ReadOnly vMyEdit, %Command_Line% ; добавляем поле редактирования (только для чтения)
Gui, Add, Button, Default w75 h23 gMyButton, &amp;OK ; добавляем кнопку &quot;ОК&quot; с заданными размерами
Gui, Show, Hide ; создаем окно в скрытом виде
WinGetPos,,, Gui_Width ; получить ширину окна
GuiControl, Move, Static1, % &quot;w&quot; Gui_Width - 24 ; поместить заголовок строки по центру ширины
GuiControl, Move, Edit1, % &quot;w&quot; Gui_Width - 24 ; поместить поле с командной строкой по центру ширины
GuiControl, Move, Button1, % &quot;x&quot; Gui_Width/2 - 75/2 - 3 ; поместить кнопку &quot;ОК&quot; по центру ширины
Gui, Show ; показываем окно
Return ; закончить секцию автовыполнения

GuiClose: ; при нажатии кнопки закрытия окна
GuiEscape: ; при нажатии кнопки ESC
MyButton: ; при нажатии кнопки &quot;ОК&quot;
ExitApp ; закончить скрипт
Return ; закончить обработку горячей клавиши

ExpandEnvVars( ppath ) ; функция по разворачиванию переменных окружения в их содержание
{
    VarSetCapacity( Dest, 2000 ) ; обеспечиваем достаточную вместимость переменной
    DllCall( &quot;ExpandEnvironmentStrings&quot;, Str, ppath, Str, Dest, Int, 1998 ) ; получаем содержание п. окруж-я
    Return, Dest ; возвращаем содержание переменной окружения
}</code></pre></div><p><strong>Забрать оба скрипта в одном архивчике:</strong></p>]]></description>
			<author><![CDATA[null@example.com (Androgen)]]></author>
			<pubDate>Sun, 27 Aug 2006 00:40:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=379#p379</guid>
		</item>
	</channel>
</rss>
