<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Время нажатия any key.]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8295&amp;type=atom" />
	<updated>2013-05-16T11:08:22Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8295</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72159#p72159" />
			<content type="html"><![CDATA[<p>Код из #12 удалось внедрить в мои кракозябры. Свою функцию этот фрагмент выполняет отлично. К сожалению полностью наладить скрипт, чтобы свести на нет глюки второй программы, не удалось.&nbsp; Глюки оказались более разнообразными, чем казалось в начале.</p><p>&nbsp; Всем спасибо за помощь!</p>]]></content>
			<author>
				<name><![CDATA[Pokerist]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24990</uri>
			</author>
			<updated>2013-05-16T11:08:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72159#p72159</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72098#p72098" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Добавьте в начало этого скрипта что-нибудь вроде</p></blockquote></div><p>Зачем вставлять в код подпрограмму периодичеки активирующую окно целевой программы бывшее активным раньше всех других?<br />Код в 26 посте запоминает окно при нажатии хоткея, и работает только с этим окном.<br />Код запоминающий последнее нажатие кнопки приведён в 12 посте. В нём же решён сабж &quot;Время нажатия любой кнопки&quot;.</p><p>Чего вам ещё нехватает для решения задачи?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-05-14T06:33:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72098#p72098</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72097#p72097" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Вы вместо того чтоб доказать мне что вы уже давно всем и всё разжевали, а до меня это не доходит, лучше коментировали бы чем вам неподходят предлагаемые решения, или что вам в них не ясно.</p></blockquote></div><p>&nbsp; На данный момент мне не ясно как вставить код из 22 в свой скрипт, если там 90%&nbsp; Хоткеев уже находится внутри одного </p><div class="quotebox"><blockquote><p>#if&nbsp; </p><p>#</p></blockquote></div><p> который определяет, что это нужный тип окна первой программы.</p><p>&nbsp; Как их правильно вставлять друг в друга?</p>]]></content>
			<author>
				<name><![CDATA[Pokerist]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24990</uri>
			</author>
			<updated>2013-05-13T23:39:40Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72097#p72097</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72096#p72096" />
			<content type="html"><![CDATA[<p>Добавьте в начало этого скрипта что-нибудь вроде </p><div class="codebox"><pre><code>Settimer,tim1, 100


Sleep, 5000





tim1:
Settimer, tim1, Off
WinGet, bloknot, IDLast, ahk_exe notepad.exe
Random, t_pausa, 50, 200
Sleep, % t_pausa
WinActivate,  ahk_id %bloknot%
Settimer, tim1, On
return</code></pre></div><p>&nbsp; &nbsp;И попробуйте отправить хоткей в <strong>то</strong> окно блокнота, которое вы выбрали.&nbsp; Можно конечно увеличить максимум паузы до минуты для большего приближения к условиям задачи, но тогда надо будет сделать пару тысяч попыток, чтобы точно убедиться, что этот вариант не подходит.</p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><p>Мне кажется, что Вы не внимательно читали моё описание и пропустили некоторые детали. Я выделил в цитате это место. <br /></p><div class="quotebox"><blockquote><p>Вторая программа иногда как-то странно&nbsp; воздействует&nbsp; <span class="bbu">на первую так, что у той </span>неожиданно меняется активное окно, что категорически недопустимо.</p></blockquote></div><p>&nbsp; А Вы, как я понял, пытаетесь не допустить отправки хоткеев в окна <span class="bbu">других</span> программ.</p>]]></content>
			<author>
				<name><![CDATA[Pokerist]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24990</uri>
			</author>
			<updated>2013-05-13T23:31:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72096#p72096</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72095#p72095" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>я нажимаю горячую клавишу, а за мгновение до этого активное окно меняется из-за глюка второй программы. И отправка уже производится в другое окно, куда надо было отправить совсем другую комбинацию.</p></blockquote></div><p>Иллюстрация давно предложенного решения:<br /></p><div class="codebox"><pre><code>

#IfWinActive ahk_exe notepad.exe
Space::
    hTargetWin := WinExist(&quot;A&quot;)
    TrayTip, Окно блокнота активно, макрос запущен.           
    Loop 9     
    {
        While !WinActive(&quot;ahk_id&quot; hTargetWin)
            WinActivate ahk_id %hTargetWin%
        Send {%A_Index%}{Enter} 
        Sleep 500
    }       
    Return    
#IfWinActive

Space:: TrayTip, , Окно блокнота неактивно 

</code></pre></div><p>Хоткей &quot;Пробел&quot; будет запускать макрос только если активно окно Блокнота. <br />Для понимания следует запустить несколько окон Блокнота.<br />Во время посыла нажатий, активируйте любые другие окна для того чтобы убедится, что посыл будет произведён только в <strong>то</strong> окно.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-05-13T22:05:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72095#p72095</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72092#p72092" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Чтобы что-то комментировать надо хотя бы примерно понять что это.</p></blockquote></div><p>Значит надо понять что это. А чтобы понять что это, надо задать вопрос &quot;что это?&quot;<br />Потому что тот кто про <strong>это</strong> написал, не может знать что вы незнаете что это.<br />Сомневаюсь что вы увидите\дождётесь полностью понятное для вас решение без лишних вопросов, ведь если оно есть вы бы самостоятельно до него дошли.<br /></p><div class="quotebox"><blockquote><p>Если Вы хотите обсуждать меня, а не мою проблему пишите мне в личку, ок?</p></blockquote></div><p>Уважаемый господин <strong>Pokerist</strong>, у меня нет никакого желания\мотивов обсуждать вашу персону лично, ибо как вы догадываетесь я с вами лично незнаком. Я лишь высказываю вам предположение о том, что ваш способ познания нового путём игнорирования этого самого нового не совсем продуктивен. И лично у меня такой стиль общения вызывает ощущение что тема заведена не для решения вопроса, а просто пообщатся с другими участниками форума. Но для этого на форуме есть раздел <strong>OFF:</strong></p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-05-13T19:18:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72092#p72092</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72091#p72091" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>А вы поняли те варианты которые вам были предложены?&nbsp; Простейший вариант без различных хуков в 18 сообщении, вы не посчитали нужным удостоить своего драгоценного внимания и как-то прокомментировать.</p><p>&nbsp; &nbsp;Помоему вместо того чтобы вникать в написанное выше или конструктивно критиковать его же, вы ищете какой-то потаённый смысл и делаете выводы даже необъясняя из чего они произрастают... <br />Все необходимые методы решения вам предложены, но вы их попросту игнорируете.</p></blockquote></div><p>&nbsp; Чтобы что-то комментировать надо хотя бы примерно понять что это. Пока мне этого не удалось. Если Вы хотите обсуждать меня, а не мою проблему пишите мне в личку, ок?</p>]]></content>
			<author>
				<name><![CDATA[Pokerist]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24990</uri>
			</author>
			<updated>2013-05-13T19:03:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72091#p72091</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72090#p72090" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Pokerist пишет:</cite><blockquote><p>Вы предлагаете создать для каждого окна свой набор хоткеев для каждого набора действий?</p></blockquote></div><p>Даже и в мыслях не было такой глупости. Вы вообще откуда это взяли???<br /></p><div class="quotebox"><blockquote><p>Честно говоря, я наделся на какой-то очень простой выход.</p></blockquote></div><p>А вы поняли те варианты которые вам были предложены?&nbsp; Простейший вариант без различных хуков в 18 сообщении, вы не посчитали нужным удостоить своего драгоценного внимания и как-то прокомментировать.</p><p>&nbsp; &nbsp;Помоему вместо того чтобы вникать в написанное выше или конструктивно критиковать его же, вы ищете какой-то потаённый смысл и делаете выводы даже необъясняя из чего они произрастают... <br />Все необходимые методы решения вам предложены, но вы их попросту игнорируете.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-05-13T18:53:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72090#p72090</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72089#p72089" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>- самой первой программой, но по предсказуемым правилам<br />- хоткеем<br />- мышкой,</p></blockquote></div><p>Если эти события вы можете обрабатывать, то задача сводится к отслеживанию событий смены фокуса ввода и сравнению времени «кликов, нажатий» и времени смены фокуса.<br />Если смена фокуса и «клики, нажатия» произошли в «примерно одно время» то можно предположить, что смена фокуса произведена вами, а не молниеносной и непредсказуемой «второй программой».</p><div class="codebox"><pre><code>#Persistent
DllCall(&quot;SetWinEventHook&quot;
    , &quot;UInt&quot;, 0x8005
    , &quot;UInt&quot;, 0x8005
    , &quot;UInt&quot;, 0
    , &quot;Ptr&quot;, RegisterCallback(&quot;HookProc&quot;, &quot;F&quot;)
    , &quot;UInt&quot;, 0
    , &quot;UInt&quot;, 0
    , &quot;UInt&quot;, 0)

return

HookProc(hWinEventHook, event, hwnd, idObject, idChild, dwEventThread, dwmsEventTime) {
    global focusChanged := dwmsEventTime
}

#if WinActive(&quot;ahk_exe имяпервойпрограммы.exe&quot;) ; если активно окно нужной программы
    &amp;&amp; (A_TickCount - focustChanged &gt; 500 ; и изменение фокуса ввода произошло достаточно давно
    || Abs(focusChanged - focusSetByUser) &gt; 100) ; или изменение фокуса ввода произошло совсем недавно, и есть шанс, что мы его прозевали и действия из цитаты в начале сообщения были произведены почти в то же время, что и смена фокуса...

; проблемные горячие клавиши
</code></pre></div><p>В переменную focusChanged&nbsp; <em>записывается</em> время изменения фокуса ввода.<br />В переменную focusSetByUser <em>записывайте</em> время произведения действий, приводящих к изменению активного окна первой программы.<br />Пример отслеживания изменения фокуса кликом левой кнопки мыши:<br /></p><div class="codebox"><pre><code>
#if WinFromPoint(&quot;ahk_exe имяпервойпрограммы.exe&quot;)
    ~Lbutton::focusSetByUser := A_TickCount

WinFromPoint(args*) {
    MouseGetPos,,, hwnd
    return WinExist(&quot;ahk_id&quot; hwnd &quot; &quot; args.Remove(1), args*)
}
</code></pre></div><p> <br /> <br /></p><div class="quotebox"><blockquote><p>очень простой выход</p></blockquote></div><p>…Из ситуации, в которой скрипт должен угадать, куда же смотрит юзер, когда жмёт клавиши.</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2013-05-13T17:28:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72089#p72089</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72085#p72085" />
			<content type="html"><![CDATA[<p>Честно говоря, я наделся на какой-то очень простой выход.&nbsp; Наверное самым простым для меня решением будет в новом скрипте создать те же хоткеи, что и в рабочем, добавить туда клики мышки,&nbsp; дать им возможность отправлять самих себя и вести учёт нажатий с помощью A_ThisHotkey. <br />&nbsp; Наверное самый тупой способ, но если он будет работать, и хоткеи старого скрипта не будут сбоить, то наверное для меня это будет выходом из ситуации.</p>]]></content>
			<author>
				<name><![CDATA[Pokerist]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24990</uri>
			</author>
			<updated>2013-05-13T14:38:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72085#p72085</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72083#p72083" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Для отправки команды именно окну есть в ControlSend параметр <em>ahk_parent</em><br />А для отправки именн в то окно используется хендл который был получен при старте хоткея.<br />ControlSend работает не вовсех приложениях, но в каждом случае это нужно сначала проверить...</p></blockquote></div><p>&nbsp; &nbsp; У меня примерно 20 наборов команд для этих окон, которые повешены на хоткеи. А окон несколько за раз,&nbsp; и всего они имеют около сотни различных заголовков. Причём одно окно может просуществовать пару минут и быть заменено другим,&nbsp; а другое будет существовать более часа.<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Вы предлагаете создать для каждого окна свой набор хоткеев для каждого набора действий?&nbsp; Даже если всё максимально упростить, получится что-то около нескольких сотен вариантов.&nbsp; Очень неудобно будет, когда нужно быстро отправить в окно нужные действия: сначала понять, что это же за окно передо мной, какой хоткей соответствует нужному набору команд именно для этого окна.</p>]]></content>
			<author>
				<name><![CDATA[Pokerist]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24990</uri>
			</author>
			<updated>2013-05-13T14:30:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72083#p72083</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72080#p72080" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Подавляющая часть элементов управления окна не опознаётся как контролы.&nbsp; Но не только в этом проблема.&nbsp; Попробую уточнить описание. У первой программы несколько одинаковых окон.&nbsp; Время от времени в активном окне мне нужно произвести ряд кликов и изменить текст котрола.&nbsp; Я создал несколько разных горячих клавиш, которые отправляют разные наборы кликов и текста.</p></blockquote></div><p>Для отправки команды именно окну есть в ControlSend параметр <em>ahk_parent</em><br />А для отправки именн в то окно используется хендл который был получен при старте хоткея.<br />ControlSend работает не вовсех приложениях, но в каждом случае это нужно сначала проверить...</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-05-13T12:59:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72080#p72080</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72078#p72078" />
			<content type="html"><![CDATA[<p>Вы вместо того чтоб доказать мне что вы уже давно всем и всё разжевали, а до меня это не доходит, лучше коментировали бы чем вам неподходят предлагаемые решения, или что вам в них не ясно.<br /></p><div class="quotebox"><blockquote><p>Значит сделайте горячую клавишу контекстно-зависимой.</p></blockquote></div><p>Это наверно не получится т.к. окна принадлежат одной программе, и наверняка имеют один класс и заголовок, или неизвестный заранее заголовок. Но &quot;общую&quot; контекстную-зависимость конечно надо организовать:<br />#IfWinActive ahk_exe процесс<br />Здесь получаем хендл активного окна, и перед каждой командой активируем именно <strong>то</strong> окно.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-05-13T12:52:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72078#p72078</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72077#p72077" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>И зачем в третьем посте вы извлекаете код кнопки?</p></blockquote></div><p> Я? Вы слишком хорошо обо мне думаете. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Я пытаюсь ГОТОВЫЙ РАБОТАЮЩИЙ непонятный мне код приспособить под собственные нужды.&nbsp; Если бы я так хорошо знал что там можно убрать, не нарушив его работы в нужной мне части, то наверное и темы бы не было. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p> Кстати в названии темы тоже только время. Извините, если ввёл в заблуждение.&nbsp; Это не нарочно.</p>]]></content>
			<author>
				<name><![CDATA[Pokerist]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24990</uri>
			</author>
			<updated>2013-05-13T12:39:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72077#p72077</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Время нажатия any key.]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=72076#p72076" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>я нажимаю горячую клавишу, а за мгновение до этого активное окно меняется</p></blockquote></div><p>Значит сделайте горячую клавишу контекстно-зависимой. Подпрограмма горячей клавиши не начнёт выполненятся, если активное окно «не то».</p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2013-05-13T12:39:41Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=72076#p72076</id>
		</entry>
</feed>
