Вопрос или проблема
Можно ли сделать так, чтобы этот скрипт работал в определенном неактивном/свернутом окне?
loop
{
dllcall("keybd_event", int, VK, int, SC, int, 0, int, 0)
dllcall("keybd_event", int, VK, int, SC, int, 2, int, 0)
}
Pause::Pause
Вы можете использовать ControlSend
. Вам не нужно отправлять отдельную команду ‘вверх’, хотя вы можете добавить её, если хотите. Клавиши будут отправлены, даже если окно свернуто или неактивно.
Обратите внимание, что это не проверка того, так ли это, она просто пытается отправить в любом случае.
myWinTitle:="ahk_exe iexplore.exe" ; выберите заголовок окна или программу
Loop {
ControlSend,,^{vk43sc02E}, %myWinTitle% ; отправить Ctrl+C
Sleep 100
}
pause::pause
.
Ответ или решение
Когда речь заходит о выполнении сценариев AHK (AutoHotkey) в неактивных или минимизированных окнах, важно понимать, что есть решения, которые позволяют достигнуть этой цели. В данном контексте вы упомянули код, использующий вызовы внешних библиотек для отправки нажатий клавиш, но есть более элегантный способ достижения вашей цели: использование команды ControlSend
.
Применение команды ControlSend
Команда ControlSend
позволяет отправлять нажатия клавиш непосредственно в указанное окно, даже если оно неактивно или минимизировано. Это делает ее идеальным инструментом для вашей задачи. Ниже приводится разбор кода и его вариации.
myWinTitle := "ahk_exe iexplore.exe" ; Укажите имя окна или исполняемого файла
Loop {
ControlSend,,^{vk43sc02E}, %myWinTitle% ; отправить комбинацию Ctrl+C
Sleep 100 ; Задержка в 100 миллисекунд
}
Pause::Pause ; Возможность приостановить выполнение скрипта
Как работает данный код
-
myWinTitle: Здесь вы задаете название окна, с которым хотите взаимодействовать. Использовать
ahk_exe
позволяет указать конкретный исполняемый файл, что помогает точно идентифицировать нужное приложение. -
ControlSend: Эта команда принимает несколько аргументов. Первый аргумент обозначает контроль, которому нужно отправить сообщения. Здесь он опущен, что означает, что сообщение будет отправлено в все контролы окна. Вторым аргументом идет комбинация клавиш, которую вы хотите отправить. В данном случае
^{vk43sc02E}
соответствует сочетанию клавиш Ctrl+C. -
Sleep 100: Это команда, устанавливающая задержку в 100 миллисекунд между отправкой команд, что позволяет избежать возможности перегрузки системы слишком частыми вызовами.
-
Pause::Pause: Эта строка кода создает возможность приостановки выполнения скрипта по нажатию клавиши Pause на клавиатуре.
Преимущества использования ControlSend
-
Отправка сообщений в неактивные окна: Главное преимущество этой команды заключается в том, что она позволяет отправлять сообщения даже если окно приложения не находится в фокусе, что делает ее идеальной для автоматизации задач в условиях многозадачности.
-
Легкость в настройке: Вы можете легко адаптировать код под свои нужды, изменяя комбинации клавиш и настраивая параметры цикла.
Заключение
Использование ControlSend
является оптимальным решением для вашего запроса. Это не только обеспечивает необходимую функциональность, но и значительно упрощает работу с кодом. Следуя приведенному примеру, вы сможете направлять команды в любое окно, даже если оно не активно. Это намного более удобно и эффективно, чем использовать прямые вызовы библиотек для отправки нажатий клавиш.
Если у вас возникнут дополнительные вопросы или потребуется помощь с более сложными сценариями, не стесняйтесь обращаться.