Почему скрипт не может быть приостановлен / приостановлен?
Я написал этот простой скрипт 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:
Вы можете быть осторожны с таким небрежным регистратором буфера обмена. Я предполагаю, что вы не хотите, чтобы все виды данных (например, пароли) отображались там.