Почему скрипт не может быть приостановлен / приостановлен?

Я написал этот простой скрипт AHK, он работает. Но щелкните значок systray правой кнопкой мыши - приостановить / приостановить, он просто продолжает работать. Это из-за чего-то в моем коде? или про win7 x64?

#Persistent
return

OnClipboardChange:
WinGetActiveTitle, OutputVar 
IfWinExist, collect.doc 
{
    WinActivate       ; use the window found above
    send,^v
    send,{Enter}
    winactivate,%Outputvar%
}
else
    tooltip,need collect doc,400,400
Sleep 100
return

1 ответ

Решение

И пауза, и приостановка не предназначены для блокировки автоматически вызываемых подпрограмм, таких как OnClipboardChange или же GuiClose, Pause просто блокирует текущий поток, что означает, что каждый вновь созданный поток все еще будет работать, а изменение в буфере обмена создает новый поток. Ergo, Pause не могу заблокировать это.
В таких случаях вам нужно реализовать собственную часть логики в "подпрограмме события", которая проверяет какое-то состояние.
Если исходить из того, что функциональность зависит от состояния паузы, достаточно просто проверить наличие встроенного A_IsPaused:

OnClipboardChange:
    if(A_IsPaused) {
        return
    }
    msgbox, 'sup?
return

Есть, конечно, много способов реализовать это. Вы также можете определить свою собственную горячую клавишу для активации / деактивации / переключения пользовательского состояния.

PS:
Активация окна только для вставки текста кажется мне немного ненужной и надоедливой; взглянуть на Control Команды (например, Control, EditPaste) или доступ к Word через COM. Я полагаю, что в зависимости от того, что вы делаете, прямая запись в текстовый файл и / или хранилище в памяти может быть лучшей альтернативой работающему экземпляру Word.

PPS:
Вы можете быть осторожны с таким небрежным регистратором буфера обмена. Я предполагаю, что вы не хотите, чтобы все виды данных (например, пароли) отображались там.

Другие вопросы по тегам