Тема: 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

