<?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>https://forum.script-coding.com/viewtopic.php?id=7481</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7481&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: неправильная обработка жестов».]]></description>
		<lastBuildDate>Tue, 21 Aug 2012 11:24:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: неправильная обработка жестов]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62998#p62998</link>
			<description><![CDATA[<p><strong>MouseIsOverBrowser</strong> возвращает 1 или 0, подразумевается <em>true</em> и <em>false</em>, число не равное нулю интерпретируется как «не false т.е. true».<br />Поэтому можно использовать <strong>return WinActive(&quot;ahk_group Browsers&quot;)</strong> если же возвращать нужно именно булево значение то <strong>return !!WinActive(&quot;ahk_group Browsers&quot;)</strong></p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Tue, 21 Aug 2012 11:24:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62998#p62998</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: неправильная обработка жестов]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62997#p62997</link>
			<description><![CDATA[<p>Ух, спасибо большое <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><p>Я правильно вас понял?<br /></p><div class="codebox"><pre><code>GroupAdd, Browsers, ahk_class Chrome_WidgetWin_1
GroupAdd, Browsers, ahk_class OperaWindowClass ; беда со вкладками
GroupAdd, Browsers, ahk_class MozillaWindowClass
GroupAdd, Browsers, ahk_class IEFrame

MouseIsOverBrowser()
{
  global
  MouseGetPos, XPos, YPos, WinID, WinControl
  if (WinActive(&quot;ahk_group Browsers&quot;)) {
    return 1
  } else {
    return 0
  }
}</code></pre></div><p>Век живи - век учись!<br />А еще замечания по коду будут?</p>]]></description>
			<author><![CDATA[null@example.com (gleam)]]></author>
			<pubDate>Tue, 21 Aug 2012 11:04:33 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62997#p62997</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: неправильная обработка жестов]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62993#p62993</link>
			<description><![CDATA[<p>Комментарии:</p><p><strong>WinActive(&quot;ahk_class НекийКласс&quot;)</strong> каждый вызов подразумевает поиск активного окна и определение его класса, если использовать эту функцию в условии с множеством <strong>OR</strong> — скорость выполнения этого участка кода будет зависеть от позиции в строке вызова функции с подходящим параметром. Способ избежать этого: либо определение класса активного окна и однократного сравнения его со строкой содержащей список всех подходящих под условие окон, либо использование предварительного <strong>GroupAdd</strong> и однократного <strong>WinActive(&quot;ahk_group GroupName&quot;)</strong> в условии.</p><p><strong>#if MouseIsOverBrowser()</strong> — директива воздействующая на нижележащие метки горячих клавиш, но не более, <strong>~RButton::</strong> и нижележащий код оперируют глобальными переменными, поэтому <strong>global</strong> в данном фрагменте кода делает переменные «супер-глобальными», а это не востребовано.</p>]]></description>
			<author><![CDATA[null@example.com (creature.ws)]]></author>
			<pubDate>Tue, 21 Aug 2012 03:04:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62993#p62993</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: неправильная обработка жестов]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62975#p62975</link>
			<description><![CDATA[<p>Ответ найден - фокус забирало контекстное меню.</p><p>Финальная версия (вдруг кому-то понадобится <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> ) ниже:<br /></p><div class="codebox"><pre><code>#SingleInstance force
CoordMode, Mouse

#if MouseIsOverBrowser()
  ~RButton::
    global moved := 0
    global trace := &quot;&quot;  ; trace of the mouse in each CLOCK
    global completeTrace := &quot;&quot;  ; ful-length trace of the mouse
    
    preX := XPos
    preY := YPos

    while GetKeyState(&quot;RButton&quot;) {
      sleep, 100
      MouseGetPos, XPos, YPos
      ;ToolTip, % XPos &quot; - &quot; YPos

      dx := XPos - preX
      dy := YPos - preY
      ;ToolTip, % dx &quot; - &quot; dy
      
      ; UP = U, DOWN = D, LEFT = L, RIGHT = R
      ignoreZone := 2 ;anti cursor-shaking

      if ((abs(dx) &gt;= abs(dy)) and (abs(dx) &gt;= ignoreZone)) {
        if (dx &lt; 0) {
          trace := &quot;L&quot;
        } else if (dx &gt; 0) {
          trace := &quot;R&quot;
        }
      } else if (abs(dy) &gt;= ignoreZone) {
        if (dy &lt; 0) {
          trace := &quot;U&quot; 
        } else if (dy &gt; 0) {
          trace := &quot;D&quot; 
        }
      } else {
        trace := &quot;&quot;
      }

      StringRight, lastChar, completeTrace, 1
      if (lastChar != trace) {
        completeTrace .= trace 
        moved := 1
      }
      ;ToolTip, % completeTrace
      
      preX := XPos
      preY := YPos
    }
    ;ToolTip, % completeTrace
    if (completeTrace) {
      Send {Esc} ; close context menu
    }
    
    ; write here nessesary action
    if (completeTrace == &quot;L&quot;) {
      Send {Ctrl Down}{Shift Down}{Tab}{Shift Up}{Ctrl Up}
      ;tooltip, left tab
    }
    else if (completeTrace == &quot;R&quot;) {
      Send {Ctrl Down}{Tab}{Ctrl Up}
      ;tooltip, right tab
    }
    else if (completeTrace == &quot;U&quot;) {
      Send {Ctrl Down}{SC014}{Ctrl Up}
      ;tooltip, new tab
    }
    else if (completeTrace == &quot;D&quot;) {
      Send {Ctrl Down}{SC011}{Ctrl Up}
      ;tooltip, close tab
    }
    else if (completeTrace == &quot;DU&quot;) {
      WinMinimize, A
      ;tooltip, minimize
    }
  return
  
  RButton UP::
    if (moved) {
      sleep, 10
      Send, {Esc}
    } 
  return
#if

MouseIsOverBrowser()
{
  global
  MouseGetPos, XPos, YPos, WinID, WinControl
  if  (WinActive(&quot;ahk_class Chrome_WidgetWin_1&quot;)
      or WinActive(&quot;ahk_class MozillaWindowClass&quot;)
      or WinActive(&quot;ahk_class OperaWindowClass&quot;) ; беда со вкладками
      or WinActive(&quot;ahk_class IEFrame&quot;)) {
    return 1
  } else {
    return 0
  }
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (gleam)]]></author>
			<pubDate>Mon, 20 Aug 2012 18:06:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62975#p62975</guid>
		</item>
		<item>
			<title><![CDATA[AHK: неправильная обработка жестов]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=62965#p62965</link>
			<description><![CDATA[<p>Здравствуйте. Есть проблема.<br /><span class="bbu">Что нужно:</span><br />Реализация управления жестами в разных браузерах (хром, фф, опера, ie).<br />Для начала, необходимы следующие жесты:<br />ПКМ+жест вверх = новая вкладка (ctrl+t)<br />ПКМ+жест вниз = закрыть вкладку (ctrl+w)<br />ПКМ+жест вправо = переключиться на вкладку справа (ctrl+tab)<br />ПКМ+жест влево =&nbsp; переключиться на вкладку слева (ctrl+shift+tab)<br />ПКМ+жест (вниз+вверх) = свернуть окно (WinMinimize, A)</p><p><span class="bbu">Моя реализация</span><br /></p><div class="codebox"><pre><code>#SingleInstance force
CoordMode, Mouse

#if MouseIsOverBrowser()
  ~RButton::
    global trace := &quot;&quot;  ; trace of the mouse in each CLOCK
    global completeTrace := &quot;&quot;  ; ful-length trace of the mouse
    
    preX := XPos
    preY := YPos

    while GetKeyState(&quot;RButton&quot;) {
      sleep, 50
      MouseGetPos, XPos, YPos
      ;ToolTip, % XPos &quot; - &quot; YPos

      dx := XPos - preX
      dy := YPos - preY
      ;ToolTip, % dx &quot; - &quot; dy
      
      ; UP = U, DOWN = D, LEFT = L, RIGHT = R
      ignoreZone := 5

      if ((abs(dx) &gt; abs(dy)) and (abs(dx) &gt; ignoreZone)) {
        if (dx &lt; 0) {
          trace := &quot;L&quot;
        } else if (dx &gt; 0) {
          trace := &quot;R&quot;
        }
      } else if ((abs(dy) &gt; abs(dx)) and (abs(dy) &gt; ignoreZone)) {
        if (dy &lt; 0) {
          trace := &quot;U&quot; 
        } else if (dy &gt; 0) {
          trace := &quot;D&quot; 
        }
      } else {
        trace := &quot;&quot;
      }

      StringRight, lastChar, completeTrace, 1
      if (lastChar != trace) {
        completeTrace .= trace 
      }
      ;ToolTip, % completeTrace
      
      preX := XPos
      preY := YPos
    }
    ;ToolTip, % completeTrace

    ; write here nessesary action
    if (completeTrace == &quot;L&quot;) {
      Send {Ctrl Down}{Shift Down}{Tab}{Shift Up}{Ctrl Up}
      tooltip, left
    }
    if (completeTrace == &quot;R&quot;) {
      Send {Ctrl Down}{Tab}{Ctrl Up}
      tooltip, right
    }
    if (completeTrace == &quot;U&quot;) {
      Send {Ctrl Down}{SC014}{Ctrl Up}
      tooltip, up
    }
    if (completeTrace == &quot;D&quot;) {
      Send {Ctrl Down}{w}{Ctrl Up}
      tooltip, down
    }
    if (completeTrace == &quot;DU&quot;) {
      WinMinimize, A
      tooltip, minimize
    }

    completeTrace := &quot;&quot;
    trace := &quot;&quot;
  return
#if

MouseIsOverBrowser()
{
  global
  MouseGetPos, XPos, YPos, WinID, WinControl
  if  (WinActive(&quot;ahk_class Chrome_WidgetWin_1&quot;)
      or WinActive(&quot;ahk_class MozillaWindowClass&quot;)
      or WinActive(&quot;ahk_class OperaWindowClas&quot;) ; опера идет нахер большими шагами со своим встроенным обработчиком мыши...
      or WinActive(&quot;ahk_class IEFrame&quot;)) {
    return 1
  } else {
    return 0
  }
}

;Esc::ExitApp</code></pre></div><p><span class="bbu">Проблемы:</span><br />Идеально работает только в Internet Explorer.<br />В других браузерах проблемы - tooltip всплывает всегда, значит жест отрабатывается как надо.<br />Но вот действие (сочетание кнопок) может выполниться, а может и нет, при этом <strong>WinMinimize, A</strong> выполняется всегда.</p><p>В чем может быть проблема?</p>]]></description>
			<author><![CDATA[null@example.com (gleam)]]></author>
			<pubDate>Mon, 20 Aug 2012 12:44:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=62965#p62965</guid>
		</item>
	</channel>
</rss>
