Как реализовать простой счётчик на 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())