1

Тема: AHK: Почему перестает отвечать ЛКМ ?

Добрый вечер!
Пишу скрипт для быстрого добавления заметок в базу. На моем компьютере все работает без проблем. Ни разу не словил этот глюк. Но знакомый тестировщик постоянно ловит зависоны. Скрипт-то продолжает работать. Но перестает отвечать ЛКМ.

Подскажите, в чем может быть проблема, как исправить или куда копать.

Куски кода с комментариями.

+ открыть спойлер

#SingleInstance force
#MaxHotkeysPerInterval 100
#InstallKeybdHook
#InstallMouseHook
#UseHook

...

; выделяем текст и, не отпуская левую, жмем колесико. запускается скрипт
~ LButton & MButton:: ; Если нажато колесико
Loop
{
    Sleep, 10
    GetKeyState, state, MButton  , P
    if state = U  ; The key has been released, so break out of the loop.
        break
}

...

return

; выделяем текст и, не отпуская левую, жмем правую. запускается скрипт
; кстати вот эта штука тоже у него перестает работать!!! остальные горячие работают.
~ LButton & RButton:: ; Если нажата ПКМ
Loop
{
    Sleep, 10
    GetKeyState, state, RButton  , P
    if state = U  ; The key has been released, so break out of the loop.
        break
}

...

return


#IfWinActive, Главная

+LButton::
event:=com10
Click
Return

+RButton::
event:=com11
Click
Return

+MButton::
event:=com12
Click
Return

^LButton::
event:=com7
Click
Return

^RButton::
event:=com8
Click
Return

^MButton::
event:=com9
Click
Return

;вот тут все самое интересное
LButton::
; вся эта запара для того, чтобы работало как обычное нажатие, так и длительное.
; делаем клик программно. потом ждем 250мс и если все еще держим, то отпускаем и запускается действие.
click, down
event:=com1
MouseGetPos, xpos, ypos
; это мы смотрим, щелчок по области экрана или нет. если в не области, то чтобы можно было перетаскивать окно и менять размеры.
if (ypos<50) or (xpos<9) or (xpos>W-11) or (ypos-30>H) {
	Loop
{
    Sleep, 10
    GetKeyState, state, LButton  , P
    if state = U  ; The key has been released, so break out of the loop.
        break
}

	click, up
} else {
	; тут будем проверять на задержку
	sleep, 250
	GetKeyState, state, Lbutton
	if state = D
    {
	event:=com2
	click, up
    }
}

return

RButton::
KeyWait,RButton, T0.3
if (ErrorLevel = 0) 
event:=com5	
else
event:=com6
Click
Return

MButton::
KeyWait,MButton, T0.3
if (ErrorLevel = 0) 
event:=com3	
else
event:=com4
Click
Return
#IfWinActive


...

; здесь идет обработка нажатия и определение события.

mainHtml_onclick(mainHtml) {
ev:=event
event:=""

...

; здесь в зависимости от события выполняем нужное действие

}

Обзорное видео скрипта.
https://www.youtube.com/watch?v=l5a065AQsfk

2

Re: AHK: Почему перестает отвечать ЛКМ ?

Не сочтите за рекламу. Рекламировать цели нет ничего. Кто поможет, хоть подарить могу.