История следующая
Лежу я тут недавно, в 5 утра, а сам понимаю, что вставать-то мне в 9. А сплю я ну очень крепко. И в целом мне сложно проснуться.
И я осознаю, что нужна тяжёлая артиллерия! Что-то из давно себя зарекомендовавшего. А единственное, что меня стабильно хорошо будило - это AIMP на ноуте, который запускал мой плейлист на полную катушку в заданное время. А теперь у меня Macbook, а вместо скачанного архива музыки - Яндекс Музыка.
Решение, казалось бы, найдено. Открой приложение, да настрой запуск по таймеру, да? А вот как бы не так! В ЯМузыке такой фичи нет, крутитесь как хотите.
Настроить что-то такое через Календарь и другие штатные приложения мне не удалось.
Потраченные в пустую пол часа моего драгоценного сна! Чёрт! Надо решать как это сделать, это уже дело принципа!
-Что же, что мы умеем?
-Мы умеем писать автотесты на Java!
-Как нам это тут может помочь?
-Ну хз...
Ага! Фреймворк Robot. Вроде штатная Java либа. Давайте раскручивать с чем умеем работать. Вооружаемся гуглом и Perplexity. Ещё пол часика умствований и у нас уже запускается приложение Яндекс Музыка.
Теперь остался вопрос, а как заставить его запускаться в нужное время и включать воспроизведение музыки?
Ну с запуском по времени не сложно Calendar и Timer. А вот как запустить воспроизведение вообще не тривиально. Клик на пробел - не работает, на enter - не работает. После прокликивания всех кнопок вычисляем, что запускается по клику на "K". Ну всё, теперь-то вообще нет проблем, да? Робот кликнет на любую кнопку - только скажи, что тыкнуть. Дописываем, компилим, запускаем - хрен там плавал а вот вы и не угадали, не работает! Клик по кнопке происходит не в последнем открытом окне, а на рабочем столе.
Да за шо!?
Решение? Надо как-то "активировать" окно ЯМузыки. Честно, вот тут я уже не придумал ничего умнее, чем просто тыкнуть на центр экрана(примерно по центру окно открывается). Бинго! Теперь работает всё. Тестируем, выставляем нужное время запуска на 9 утра - ложимся спать. Времени 6:45....
Просыпаемся в ~9:15....музыка не играет. Какого хера!? - спросите вы. А всё просто, а экран заблокировался. Вывод - тыкать на заблокированном экране можно до посинения - не поможет:D
Отключаем блокировку экрана - теперь задача решена.
А код этого решения прилагаю к посту:D
Спасибо за внимание)
package org.example; import java.awt.*; import java.io.IOException; import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Main { public static void main(String[] args) { // Установите время запуска (например, сегодня в 15:30) Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 9); calendar.set(Calendar.MINUTE, 00); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); Date launchTime = calendar.getTime(); // Если время уже прошло сегодня, сдвигаем на следующий день if (launchTime.before(new Date())) { calendar.add(Calendar.DAY_OF_MONTH, 1); launchTime = calendar.getTime(); } Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { try { String appPath = "/Applications/Яндекс Музыка.app"; // Запускаем приложение ProcessBuilder pbOpen = new ProcessBuilder("open", appPath); pbOpen.start(); System.out.println("Яндекс Музыка запущена в " + new Date()); // Ждем, чтобы приложение успело открыться Thread.sleep(5000); // Активируем окно приложения через AppleScript String appleScriptCommand = "osascript -e 'tell application \"Яндекс Музыка\" to activate'"; ProcessBuilder pbActivate = new ProcessBuilder("bash", "-c", appleScriptCommand); pbActivate.start(); // Небольшая пауза, чтобы окно точно стало активным Thread.sleep(1000); // Используем Robot для нажатия клавиши K (Play/Pause) Robot robot = new Robot(); // Переместить курсор в координаты окна (примерно центр экрана, подкорректируйте) robot.mouseMove(500, 300); // Клик левой кнопкой мыши robot.mousePress(InputEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK); // Небольшая пауза Thread.sleep(500); // Нажать клавишу K robot.keyPress(KeyEvent.VK_K); robot.keyRelease(KeyEvent.VK_K); System.out.println("Окно активировано и нажата клавиша K для воспроизведения."); } catch (IOException | InterruptedException | AWTException e) { e.printStackTrace(); } } }, launchTime); System.out.println("Запуск Яндекс Музыки с фокусом и воспроизведением запланирован на: " + launchTime); } }
