<?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>http://forum.script-coding.com/viewtopic.php?id=8866</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8866&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Определение адреса метки до её использования».]]></description>
		<lastBuildDate>Thu, 07 Nov 2013 16:27:21 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77041#p77041</link>
			<description><![CDATA[<div class="quotebox"><cite>Indomito пишет:</cite><blockquote><p>&lt;...&gt;но как на прямую заполнить/записать в переменную, что то не зная её имени... в AHK нет таких средств или я о них не знаю.</p></blockquote></div><p>Видимо мне тоже не суждено постичь целиком замысел ТС&#039;а. Относительно данного предложения - можно поручить запись/хранение переменной процедуре хоткея, и адрес переменной будет неважен, для этого обработку хоткея поместить в функцию. До инициализации (в данном случае по хоткеям F2/F3, но можно любым способом, хоть в цикле данными из массива), контекстные клавиши в Опере и блокноте недоступны.</p><div class="codebox"><pre><code>F2::F1_opera(1) ; Инициализация F1 для оперы
F3::F1_notepad(2) ; Инициализация F1 для блокнота


#if WinActive(&quot;ahk_class OperaWindowClass&quot;)
F1::F1_opera()
F1_opera(p:=0)
{
   static a:=0 ; идентификатор
   if p {
      a:=p
      Return
   }
   if !a
      Return
  ; Тело хоткея
   MsgBox % &quot;Опера`nUIA = &quot; a
}
#if

#if WinActive(&quot;ahk_class Notepad&quot;)
F1::F1_notepad()
F1_notepad(p:=0)
{
   static a:=0 ; идентификатор
   if p {
      a:=p
      Return
   }
   if !a
      Return
  ; Тело хоткея
   MsgBox % &quot;Блокнот`nUIA = &quot; a
}
#if
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Irbis)]]></author>
			<pubDate>Thu, 07 Nov 2013 16:27:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77041#p77041</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77017#p77017</link>
			<description><![CDATA[<p>Если переменная не false, т.е. содержит индекс массива то в остальные переменные по индексу запишутся нужные значения, проще не получается, т.е. так сейчас и работает.</p><p>Я просто думаю как оформить сами переменные, как вариант вызывать функцию с передачей имени переменной, возвращать можно индекс, но как на прямую заполнить/записать в переменную, что то не зная её имени... в AHK нет таких средств или я о них не знаю.</p>]]></description>
			<author><![CDATA[null@example.com (Indomito)]]></author>
			<pubDate>Wed, 06 Nov 2013 21:35:39 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77017#p77017</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77016#p77016</link>
			<description><![CDATA[<p>В таком случае сама идея разгрузки постпроверки представляется мне немного странной. Если проверка условий не будет связана с нажатием клавиши, то с чем она будет связана?</p>]]></description>
			<author><![CDATA[null@example.com (Korobkoff)]]></author>
			<pubDate>Wed, 06 Nov 2013 21:25:15 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77016#p77016</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77013#p77013</link>
			<description><![CDATA[<p><strong><a href="http://forum.script-coding.com/profile.php?id=30703">Korobkoff</a></strong> всё абсолютно верно, я теперь вот написал в начале каждой клавиши, такой фрагмент.<br /></p><div class="codebox"><pre><code>RShift::
if (!listVar[iWitcher2_RShift]) 
    return
; Далее код получения по значению переменной Witcher2_RShift, которая является индексом в массиве
; Потом код выполнения
return</code></pre></div><p>По идее всё верно, но скрип ещё не написал, доделываю основную обработку обработку массива и думаю как оформить эти переменные.</p><p>Например так (Инициализация) </p><div class="codebox"><pre><code>listVar := [Witcher2_RShift, Witcher2_LShift,......]
Witcher2_RShift:=0, Witcher2_LShift:=0</code></pre></div><p> или как то иначе.</p><p>Жаль что нет в AHK положить по адресу...</p>]]></description>
			<author><![CDATA[null@example.com (Indomito)]]></author>
			<pubDate>Wed, 06 Nov 2013 20:45:59 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77013#p77013</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77012#p77012</link>
			<description><![CDATA[<p>Правильно ли я понял суть:<br />- в зависимости от совокупности неких условий нажатие одних и тех же клавиш должно приводить к совершению разных действий;<br />- условий настолько много, что их проверка после нажатия клавиши приводит к неприемлемой задержке;<br />- поэтому возникла мысль проверять как можно большую часть (или все) условий до нажатия клавиши;<br />- для того, чтобы сопоставить наборы действий каждой клавиши наборам условий, потребовался массив(~ы);<br />- затруднение возникло в том, как к моменту нажатия клавиши &quot;сообщить ей&quot; требуемый индекс?</p>]]></description>
			<author><![CDATA[null@example.com (Korobkoff)]]></author>
			<pubDate>Wed, 06 Nov 2013 20:22:21 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77012#p77012</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77010#p77010</link>
			<description><![CDATA[<div class="quotebox"><cite>ypppu пишет:</cite><blockquote><p>Я так и не понял. Что такое &quot;предобработка клавиши&quot;?<br />Как понимать &quot;уникальные идентификаторы для каждой подпрограммы&quot;? Что это такое и с чем его едят?</p></blockquote></div><p> </p><p>Поясняю.</p><p>Есть скрипт, который является фрагментом другого скрипта.<br />В этом скрипте присутствуют, ну скажем 10 определений клавиши RShift, они срабатывают по-разному, так как каждая из них находится в секции проверки активности разных окон.<br />Так вот проблема заключалась в том, что бы задать каждой клавише RShift разные действия, но они задаются из области, которая не контролирует окна.<br />Конечно, можно проблему решить проще, но мне показалось, что оптимально создать массив, который определит действия каждой клавиши. Проверять какое из окон активно, то же вариант, но надо сначала сделать предварительную инициализацию каждой из клавиш, что бы она сразу/напрямую считала нужные действия из массива, а не динамически их обрабатывала в ходе нажатия.<br />Что бы поменять действия по нажатию на клавишу, то я просто вношу поправки в массив, а не в процедуру обработки нажатия на клавишу. </p><p>Я попробовал динамически вариант, возникает задержка в срабатывании, а присваивать заранее действия, конечно, это можно, но возникает путаница - надо всё самому запоминать, там и переменные и ссылки на подпрограммы и запуск остановка таймера, много чего и это всё находится в одном массиве (двухмерном).</p><p>Вроде полностью объяснил, почему мне потребовался вариант с предопределением индексов</p><p>P.S. Ещё есть вариант, с предописанием и проверкой меток, но там нет зависимости от окон. Все подпрограммы работают в одном окне, пока не запустится любое полноэкранное приложение - тогда они просто отключаются, но не все, остаются 2-3 клавиши. Они позволяют контролировать это полно экранное приложение и ещё кое-что, что должно постоянно срабатывать.</p>]]></description>
			<author><![CDATA[null@example.com (Indomito)]]></author>
			<pubDate>Wed, 06 Nov 2013 18:52:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77010#p77010</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77009#p77009</link>
			<description><![CDATA[<p>Если сравнить твой код и мой, то мой это две строчки, а твой нет причём нет необходимости в проверке, т.к. она та и не нужна, ибо инициализация выполняется в другом скрипте и не зависит от подключаемых скриптов - см. мой код, это главный, т.е. main.ahk<br />Твой код </p><div class="codebox"><pre><code>Инициализация:
{
  initDone=1
}
if initDone=
  return

Остальной код

LButton::
{
  if initDone=
    return
  Остальной код
}</code></pre></div><p>Мой код: </p><div class="codebox"><pre><code>goto Avoid_VarScript  ; На точку обхода.
fnOverallSection(){
;код инициализации файла VarScript.ahk
return
}
;Остальной код
Avoid_VarScript: ; точка обхода
</code></pre></div><p>Что проще?</p>]]></description>
			<author><![CDATA[null@example.com (Indomito)]]></author>
			<pubDate>Wed, 06 Nov 2013 18:21:02 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77009#p77009</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77008#p77008</link>
			<description><![CDATA[<p>Я так и не понял. Что такое &quot;предобработка клавиши&quot;?<br />Как понимать &quot;уникальные идентификаторы для каждой подпрограммы&quot;? Что это такое и с чем его едят?</p>]]></description>
			<author><![CDATA[null@example.com (ypppu)]]></author>
			<pubDate>Wed, 06 Nov 2013 18:18:37 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77008#p77008</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77007#p77007</link>
			<description><![CDATA[<div class="quotebox"><cite>Indomito пишет:</cite><blockquote><p>У меня все ahk-файлы подключаются по #Include<br /><strong>И в каждом модуле: </strong><br />Первая строчка goto leave_Games(как пример, в каждом модуле разные метки, они именуются по его имени)<br />Потом код<br />Последняя leave_Games:</p></blockquote></div><p>Я про подключаемые файлы.</p><p>Или я вас не так понял...</p><p>OFF:<br />Уже спать пора...</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Wed, 06 Nov 2013 18:04:08 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77007#p77007</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77006#p77006</link>
			<description><![CDATA[<p>Это ты про всё в целом или про то тему топика?<br />Если про всё, то не думаю что получится т.е. RETURN просто завершит скрипт.</p><p>Вот основной файл.</p><div class="codebox"><pre><code>;*********************************************
;***************BEGIN SCRIPT******************
;*********************************************
;-----Инициализация
; Скрипт не выгружается
#Persistent
; Запрет повторного запуска
#SingleInstance

OnExit, EndASOS

;=============Секция подключения файлов
#Include c:\AHK\Include\                  ;  Устанавливаем путь к общим файлам
#Include PathUses.ahk
#Include C:\AHK\AllSystemOS\              ; Устанавливаем путь к файлам скрипта
#Include ResourceASOS.ahk                 ; Установка ресурсов скрипта
#Include VarScript.ahk                    ; Переменные/константы для скрипта и начальная инициализация
#Include HelpKey.ahk                      ; Справка по клавишам
#Include Games.ahk                        ; Управление играми
#Include AppStartUp.ahk                   ; Запуск приложений
#Include RunCon.ahk                       ; Запуск с консоли
;Тут писать новые подключаемые файлы к скрипту.
#Include EventManager.ahk                 ; Менеджер событий
#Include InitASOS.ahk                     ; Инициализатор скрипта. Обязательно последняя в списке подключения!!!!
#Include TrayASOS.ahk
;=============Секция инициализации скрипта
Gosub InitASOS        ;Старт иницализации
fnPathUses()          ;Иницализация путей
fnResource()          ;Иницализация ресурсов скрипта
fnOverallSection()    ;Иницализация блока переменных
fn_arMainKeyInit()
; Тут дописывать нужные иницализации.
fnTrayASOS()          ;Cменить иконку скрипта  и меню скрипта. Обязательно тут перед завершение инициализации скрипта!
Gosub lCloseInitASOS  ;Завершение иницализации. Обязательно последний вызов после всех!
return

ExitSub:
lExitProc:
EndASOS:
ExitApp
;============= </code></pre></div><p> <br />И где проверку то ставить? <br />Ведь каждый&nbsp; файл подключённый по #Include начнёт выполнятся и придётся менять порядок подключения, т.к. инициализация происходит в определенном порядке, при его нарушении скрипт будет не работоспособен.</p>]]></description>
			<author><![CDATA[null@example.com (Indomito)]]></author>
			<pubDate>Wed, 06 Nov 2013 18:00:30 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77006#p77006</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77005#p77005</link>
			<description><![CDATA[<p>Можно записать &quot;инициализацию&quot; в начале и уже из нее разрешать дальнейшее выполнение.</p><div class="codebox"><pre><code>Инициализация:
{
  initDone=1
}
if initDone=
  return

Остальной код

LButton::
{
  if initDone=
    return
  Остальной код
}
</code></pre></div><p>Это упростит ваш код.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Wed, 06 Nov 2013 17:44:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77005#p77005</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77004#p77004</link>
			<description><![CDATA[<div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p>Только лучше вместо &quot;goto&quot; используй &quot;gosub&quot;, т.к. там в конце все равно &quot;Return&quot;.</p></blockquote></div><p> это по привычке.<br />У меня все ahk-файлы подключаются по #Include<br />И в каждом модуле: <br />Первая строчка <strong>goto leave_Games</strong>(как пример, в каждом модуле разные метки, они именуются по его имени)<br />Потом код<br />Последняя <strong>leave_Games:</strong></p><p>Это что бы избежать выполнения до инициализации, которая вызывается из основного модуля.</p><p>Кстати, рекомендую такой метод, ну если ты иного не используешь.</p>]]></description>
			<author><![CDATA[null@example.com (Indomito)]]></author>
			<pubDate>Wed, 06 Nov 2013 17:38:53 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77004#p77004</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77002#p77002</link>
			<description><![CDATA[<div class="quotebox"><cite>Indomito пишет:</cite><blockquote><div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p>Скинь мне файл я посмотрю.</p></blockquote></div><p> все файлы? Ты там просто запутаешься, честное слово... около 5000 строк, не сжатый exe весит около 3 Мб... кажется или больше.</p></blockquote></div><p>Да глупость сказал. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />У самого такая программа на 2900 строк.</p><p>Только лучше вместо &quot;goto&quot; используй &quot;gosub&quot;, т.к. там в конце все равно &quot;Return&quot;.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Wed, 06 Nov 2013 17:27:22 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77002#p77002</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77001#p77001</link>
			<description><![CDATA[<div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p>Скинь мне файл я посмотрю.</p></blockquote></div><p> все файлы? Ты там просто запутаешься, честное слово... около 5000 строк, не сжатый exe весит около 3 Мб... кажется или больше.</p><p>Я кажется нашёл более простое решение, но на основе твоего <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" /> </p><div class="codebox"><pre><code>#Persistent
goto initvar
a::
if (!Var1) 
      return
 msgbox % Var1
return
b::
if (!Var2) 
      return
 msgbox % Var2
return

initvar:
Var1:=1
Var2:=2
return</code></pre></div><p>&nbsp; Ну массивы я пропустил, для упрощения, для наглядности.</p>]]></description>
			<author><![CDATA[null@example.com (Indomito)]]></author>
			<pubDate>Wed, 06 Nov 2013 17:23:30 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77001#p77001</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Определение адреса метки до её использования]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=77000#p77000</link>
			<description><![CDATA[<p>Скинь мне файл я посмотрю.</p>]]></description>
			<author><![CDATA[null@example.com (Alectric)]]></author>
			<pubDate>Wed, 06 Nov 2013 17:18:12 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=77000#p77000</guid>
		</item>
	</channel>
</rss>
