Как реализовать простой счётчик на JS, Python (или Ruby), который будет запускать таймер при открытии и закрытии определённого приложения?
Для реализации простого счётчика, который будет отслеживать время, проведенное в определённом приложении, можно использовать разные подходы в зависимости от языка программирования. ### JavaScript Если вы хотите отслеживать активность в веб-приложении, то можно использовать JavaScript с помощью интерфейса `setInterval` для запуска таймера: ```javascript let timer; let count = 0; function startTimer() { timer = setInterval(() => { count++; console.log(`Время, проведённое в приложении: ${count} секунд`); }, 1000); } function stopTimer() { clearInterval(timer); console.log(`Счётчик остановлен. Проведено времени: ${count} секунд`); } // Запускейте таймер startTimer(); // Остановите таймер при закрытии приложения (например с помощью window.onbeforeunload) // window.onbeforeunload = stopTimer; ``` Однако, JavaScript в браузере имеет ограничения на доступ к локальным приложениям. ### Python Для создания более универсального счётчика в настольном приложении на Python можно использовать библиотеку `psutil` для отслеживания запущенных процессов: ```python import time import psutil app_name = 'имя_вашего_приложения.exe' count = 0 def is_app_running(app_name): for proc in psutil.process_iter(['name']): if proc.info['name'] == app_name: return True return False try: while True: if is_app_running(app_name): count += 1 print(f"Время, проведённое в приложении: {count} секунд") else: if count > 0: print(f"Счётчик остановлен. Проведено времени: {count} секунд") count = 0 time.sleep(1) # проверять каждую секунду except KeyboardInterrupt: print("Счётчик завершён.") ``` ### Ruby На Ruby можно использовать библиотеку `sys-proctable` для аналогичных целей: ```ruby require 'sys/proctable' app_name = 'имя_вашего_приложения' count = 0 def running?(app_name) Sys::ProcTable.ps.any? { |p| p.name == app_name } end begin loop do if running?(app_name) count += 1 puts "Время, проведённое в приложении: #{count} секунд" else if count > 0 puts "Счётчик остановлен. Проведено времени: #{count} секунд" count = 0 end end sleep 1 # проверять каждую секунду end rescue Interrupt puts "Счётчик завершён." end ``` ### Заключение Выше приведены примеры на JavaScript, Python и Ruby для создания простого счётчика времени, проведённого в приложении. Вы можете изменить название приложения в переменной `app_name` на необходимое вам, а также адаптировать код под свои нужды. Каждый из этих примеров представляет собой бесконечный цикл, который проверяет, запущено ли приложение, и обновляет счётчик времени.
Если нужно зацепиться за другой элемент, вбейpowershell gps | where {$_.MainWindowTitle } | select *
import asyncio class timer_executer: def __init__(self, appname, timeout, do): self.appname = appname self.timeout = timeout self.do = do async def get_active_apps(self): cmd = 'powershell "gps | where {$_.MainWindowTitle } | select Path' cmd_execution_result = await asyncio.create_subprocess_shell(cmd, shell=True, stdout=asyncio.subprocess.PIPE) responce_raw, _ = await cmd_execution_result.communicate() responce_splited = responce_raw.decode().split("\n")[3:] return [responce_line.strip().lower() for responce_line in responce_splited if responce_line.strip()] async def loop_await(self): time_on_active = 0 while True: active_apps = await self.get_active_apps() if self.appname.lower() in active_apps: time_on_active += 1 if time_on_active >= self.timeout: self.do() break else: time_on_active = 0 await asyncio.sleep(1) async def start(self): await self.loop_await() def do_something(): print("Привет!") async def main(): timer = timer_executer("c:\\program files\\windowsapps\\microsoft.windowsnotepad_11.2409.9.0_x64__8wekyb3d8bbwe\\notepad\\notepad.exe", 10, do_something) await timer.start() asyncio.run(main())