<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=11187&amp;type=atom" />
	<updated>2016-01-02T01:50:47Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=11187</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100092#p100092" />
			<content type="html"><![CDATA[<p>Нда, зря я смешал две проблемы в 1 топик: скриншутер и правда срабатывает всегда, если закомментировать вызов функции upload(), а значит дело и правда в работе с сетью.<br /><strong>Malcev</strong>, я не умею, можешь показать как это делается?</p><p><strong>stealzy</strong>, не, там дело не в логическом залипании модификаторов и отладку я провожу outputdebug&#039;ом, а не tooltip&#039;ами - так надёжней.</p><p><strong>EDIT:</strong> Асинхронно отправлять научился, осталось только придумать как грамотно очередь сделать, но это уже оффтопик.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2016-01-02T01:50:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100092#p100092</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100091#p100091" />
			<content type="html"><![CDATA[<p>Возможно, что у вас оказывается зажатой (логически) какая-либо клавиша, из-за чего хоткеи перестают работать.<br />1) После зависания понажимайте вручную все ваши Ctrl, Shift и Tab. Если скрипт &quot;отвиснет&quot; - причина найдена.<br />Либо попробуйте поставить * перед ними - *WheelUp::<br />2) Также поставьте ToolTip сразу после хоткеев, чтобы знать наверняка, срабатывают они или нет.</p>]]></content>
			<author>
				<name><![CDATA[stealzy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=31937</uri>
			</author>
			<updated>2016-01-01T20:10:20Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100091#p100091</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100089#p100089" />
			<content type="html"><![CDATA[<p>Возможно в синхронных посылах WinHttpRequest причина.<br />Попробуй посылать асинхронно - мне помогло.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2016-01-01T19:48:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100089#p100089</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100088#p100088" />
			<content type="html"><![CDATA[<p>Похоже на какой-то баг AutoHotkey: с совершенно <a href="https://raw.githubusercontent.com/Drugoy/Autohotkey-scripts-.ahk/master/SilentScreenshotter/SilentScreenshotter%28%2Bupload%29.ahk">другим</a> скриптом наблюдаются аналогичные проблемы.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2016-01-01T19:34:29Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100088#p100088</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100039#p100039" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Попробуйте то что выполняется по горячей клавише, запускать через метку по таймеру.</p></blockquote></div><p>Увы, глюк снова проявился.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2015-12-30T16:02:11Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100039#p100039</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100015#p100015" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Попробуйте то что выполняется по горячей клавише, запускать через метку по таймеру.</p></blockquote></div><p>Спасибо, попробую.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Ну и на всякий, если есть #UseHook, On, то не надо использовать $ в префиксе хоткея.</p></blockquote></div><p>Это я уже добавил в попытке избавиться от глюка, раньше скрипт был без этой команды.<br /></p><div class="quotebox"><cite>Alectric пишет:</cite><blockquote><p>Что показывает ListLines после зависания? Или ее невозможно открыть?</p></blockquote></div><div class="quotebox"><cite>Drugoy пишет:</cite><blockquote><p>Журнал выполнения команд тоже не показывает ничего, что помогло бы в расследовании инцидента: судя по журналу, когда происходит глюк скрипт просто отдыхает: у строки Return хоткея просто продолжает тикать таймер, как будто новых нажатий хоткея не происходит.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2015-12-29T10:48:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100015#p100015</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100012#p100012" />
			<content type="html"><![CDATA[<p>Что показывает ListLines после зависания? Или ее невозможно открыть?</p>]]></content>
			<author>
				<name><![CDATA[Alectric]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26027</uri>
			</author>
			<updated>2015-12-29T02:56:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100012#p100012</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100011#p100011" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>$WheelUp::
$WheelDown::SetTimer, Label, -10</code></pre></div><p>Попробуйте то что выполняется по горячей клавише, запускать через метку по таймеру.</p><p>Ну и на всякий, если есть #UseHook, On, то не надо использовать $ в префиксе хоткея.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2015-12-28T23:30:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100011#p100011</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Почему в моём скрипте иногда hotkey перестаёт работать?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=100010#p100010" />
			<content type="html"><![CDATA[<p>Здравствуйте.<br />Наблюдаю проблему в своём скрипте, когда по какой-то причине hotkey перестаёт работать без видимых на то причин.<br />Весь скрипт состоит из инициализации, различных хоткеев, функций и меток.<br />Проблема происходит со вполне конкретными хоткеями, так что привожу только часть скрипта: инициализацию, проблемные хоткеи и одну используемую метку.<br /></p><div class="codebox"><pre><code>;{ Initialization
#SingleInstance, Force
#UseHook, On
SetWinDelay, 0
SendMode, Input	; Recommended For new scripts due to its superior speed and reliability.
#NoEnv	; Recommended For performance and compatibility with future AutoHotkey releases.
CoordMode, Mouse	; By default all coordinates are relative to the active window, changing them to be related to screen is required for proper work of some script&#039;s commands.
#MaxThreadsBuffer, Off
	;{ Retrieve data from monitors.
SysGet, monCount, MonitorCount	; Retrieving the number of monitors.
Loop, %monCount%
{
	SysGet, mon%A_Index%, Monitor, %A_Index%	; Retrieving monitors&#039; positions data.
	SysGet, UA%A_Index%, MonitorWorkArea, %A_Index%	; Getting Usable Area info.
	; Defining variables&#039; values for later use.
	UA%A_Index%centerX := UA%A_Index%Left + (UA%A_Index%halfW := (UA%A_Index%Right - UA%A_Index%Left) / 2)
	UA%A_Index%centerY := UA%A_Index%Top + (UA%A_Index%halfH := (UA%A_Index%Bottom - UA%A_Index%Top) / 2)
}
	;}
; OnExit, Exit	; Remove hooks upon exit.
; Bind left click on tray icon to open menu like If you right clicked it.
Menu, Tray, Click, 1	; Enable single click action on tray.
GoSub, AddMenu	; Add new default menu.
WS_CAPTION := 0xC00000
WS_SIZEBOX := 0x40000
Return
;}
;{ Scroll inactive windows without activating them
; Tab Wheel Scroll For Notepad++, Miranda IM (TabSRMM), AkelPad and Internet Explorer.
; Can&#039;t do the same For Google Chrome and Mozilla Firefox.
$WheelUp::
$WheelDown::
	OutputDebug, % &quot;A_ScriptName: &#039;&quot; A_ScriptName &quot;&#039; &quot; &quot;A_ThisHotkey: &#039;&quot; A_ThisHotkey &quot;&#039; start&quot;
	
	MouseGetPos, m_x, m_y, id, control, 1
	If (A_PtrSize != 8)	; AHK is 32-bit.
		hw_m_target := DllCall(&quot;WindowFromPoint&quot;, &quot;Int&quot;, m_x, &quot;Int&quot;, m_y)
	Else	; AHK is 64-bit.
	{
		m_xy := ((m_y &amp; 0xFFFFFFFF) &lt;&lt; 32) | (m_x &amp; 0xFFFFFFFF)
		hw_m_target := DllCall(&quot;WindowFromPoint&quot;, &quot;Int64&quot;, m_xy, &quot;UPtr&quot;)
	}
	WinGetClass, class, ahk_id %id%
	; WinGetClass, classA, A
	WinGet, idA, ID, A
	If (class == &quot;Notepad++&quot;) &amp;&amp; (control == &quot;SysTabControl325&quot;)	; Notepad++: ahk_class Notepad++	tab-bar classNN: SysTabControl325	listener-window classNN: Scintilla1
	{
		OutputDebug, % &quot;A_ScriptName: &#039;&quot; A_ScriptName &quot;&#039; &quot; &quot;A_ThisHotkey: &#039;&quot; A_ThisHotkey &quot;&#039; case: notepad++&quot;
		ControlGet, properTargetWin, Hwnd,, Scintilla1, ahk_id %id%
		PostMessage 0x319, 0, (A_ThisHotkey == &quot;$WheelUp&quot;) ? 0x10000 : 0x20000,, ahk_id %properTargetWin%
	}
	Else If (control == &quot;TSTabCtrlClass1&quot;)	; Miranda IM, TabSRMM window&#039;s tab-bar classNN: TSTabCtrlClass1	listener-window classNN: RichEdit20W1
	{
		OutputDebug, % &quot;A_ScriptName: &#039;&quot; A_ScriptName &quot;&#039; &quot; &quot;A_ThisHotkey: &#039;&quot; A_ThisHotkey &quot;&#039; case: tabsrmm&quot;
		ControlGet, properTargetWin, Hwnd,, RichEdit50W1, ahk_id %id%
		PostMessage 0x319, 0, (A_ThisHotkey == &quot;$WheelUp&quot;) ? 0x10000 : 0x20000,, ahk_id %properTargetWin%
	}
	Else If (class == &quot;AkelPad4&quot; &amp;&amp; control == &quot;SysTabControl321&quot;) || (class == &quot;IEFrame&quot; &amp;&amp; control == &quot;DirectUIHWND2&quot;)	; AkelPad tab bar
	{
		OutputDebug, % &quot;A_ScriptName: &#039;&quot; A_ScriptName &quot;&#039; &quot; &quot;A_ThisHotkey: &#039;&quot; A_ThisHotkey &quot;&#039; case: akelpad tabbar&quot;
		ControlSend,, % (A_ThisHotkey == &quot;$WheelUp&quot;) ? (&quot;{Ctrl Down}{Shift Down}{Tab}{Shift Up}{Ctrl Up}&quot;) : (&quot;{Ctrl Down}{Tab}{Ctrl Up}&quot;), ahk_id %id%
	}
	Else If (id != idA) &amp;&amp; (class != &quot;Progman&quot;)	; If the cursor hovers an inactive window (and which is not the desktop) - that inactive window should receive a scrolling event (without the activation of that window).
 	{
		OutputDebug, % &quot;A_ScriptName: &#039;&quot; A_ScriptName &quot;&#039; &quot; &quot;A_ThisHotkey: &#039;&quot; A_ThisHotkey &quot;&#039; case: inactive window&quot; &quot; id: &#039;&quot; id &quot;&#039; &quot; &quot;control: &#039;&quot; control &quot;&#039; &quot; &quot;hw_m_target: &#039;&quot; hw_m_target &quot;&#039; &quot; &quot;m_x: &#039;&quot; m_x &quot;&#039; &quot; &quot;m_y: &#039;&quot; m_y &quot;&#039; &quot; &quot;class: &#039;&quot; class &quot;&#039; &quot;
 		PostMessage, 0x20A, (A_ThisHotkey == &quot;$WheelUp&quot;) ? 120 &lt;&lt; 16 : -120 &lt;&lt; 16, (m_y &lt;&lt; 16) | (m_x &amp; 0xFFFF),, ahk_id %hw_m_target%
 		; PostMessage, 0x20A, (A_ThisHotkey == &quot;$WheelUp&quot;) ? 120 &lt;&lt; 16 : -120 &lt;&lt; 16, (m_y &lt;&lt; 16) | (m_x &amp; 0xFFFF),, ahk_id %id%
	}
	Else If (id == idA) || (class == &quot;Progman&quot;)	; If the cursor hovers the active window or desktop - the regular scrolling event should get sent to the active window.
	{
		OutputDebug, % &quot;A_ScriptName: &#039;&quot; A_ScriptName &quot;&#039; &quot; &quot;A_ThisHotkey: &#039;&quot; A_ThisHotkey &quot;&#039; case: active win&quot;
		If (A_ThisHotkey == &quot;$WheelUp&quot;)
			Send {WheelUp}
		Else
			Send {WheelDown}
	}
	GoSub, CleanVars
Return
	;}
CleanVars:
	currOpacity := hwndUnderCursor := x1 := y1 := winClass := maximized := winX1 := winY1 := x2 := y2 := winX2 := winY2 := ID := IDactive := control := key := value := Class := classA := properTargetWin := Hwnd := Height := m_x := m_y := hw_m_target := onTop := procName := XWin := YWin := title := &quot;&quot;
Return

;Open context menu via single left click on script&#039;s tray icon.
AddMenu:	; Add menuitem and make it default (bind to left click)
	Menu Tray, Add, ShowMenu		; Add temporary menu item.
	Menu Tray, Default, ShowMenu	; Set it to be default (it gets executed (or opened) just when you left click the tray icon).
Return

; Remove the created menuitem and show the normal menu. Then add the menuitem back The temporary menu item that 
ShowMenu:
	Menu Tray, Delete, ShowMenu	; If we don&#039;t delete that temporary menu item we created - it will be displayed in the tray icon&#039;s context menu and since clicking on it would just reopen the very same menu - we don&#039;t need it to be displayed, so we delete it.
	MouseGetPos MouseX, MouseY
	Menu Tray, Show, %MouseX%, % MouseY - 15	; By default context menu gets opened at cursor&#039;s position and to let user be able to double click the tray icon - we move this menu a 15px higher.
	GoSub, AddMenu	; We have to restore the deleted menu item for later use.
Return

	;{ Exit
Exit:	; Removing hooks upon exit.
	DllCall(&quot;UnhookWinEvent&quot;, Ptr, HWINEVENTHOOK1)
	DllCall(&quot;UnhookWinEvent&quot;, Ptr, HWINEVENTHOOK2)
	; Removing WS_EX_TOPMOST from every window we set it earlier.
	For k, v in GUIs
		WinSet, AlwaysOnTop, Off, % &quot;ahk_id &quot; v.Parent
	GUIs := &quot;&quot;
	ExitApp
	;}</code></pre></div><p>Как видно из кода - в попытке разобраться что же чёрт возьми происходит - я добавил команды для отладки.<br />Это не помогло, т.к. когда происходит вышеописанный глюк - хоткеи тупо не срабатывают, так что в отладочном журнале в этот момент ничего не оседает.</p><p>Глюк исправляется только 2 способами: рестартом скрипта или же просто открытием меню его иконки в трее.<br />Журнал выполнения команд тоже не показывает ничего, что помогло бы в расследовании инцидента: судя по журналу, когда происходит глюк скрипт просто отдыхает: у строки Return хоткея просто продолжает тикать таймер, как будто новых нажатий хоткея не происходит.</p><p>Помогите разобраться, в чём может быть дело? Глюк появляется в произвольный момент, может прям во время кручения колеса (т.е. последовательного многократного wheelup/down), а может и в любой другой момент. Появляется не часто, несколько раз в день, никакого другого софта, который работал бы с колесом мыши - в системе не используется, да и &quot;лечение&quot; глюка тоже, в общем-то, странное.</p><p>p.s.: вырезанная часть скрипта никак не влияет на работу оставшегося куска кода.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2015-12-28T23:17:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=100010#p100010</id>
		</entry>
</feed>
