local lang = jarvis.context.language local triggers = { "переключись на", "переключи на", "активируй окно", "покажи окно", "перейди в", "switch to", "activate window", "focus window", "перемкни на", "активуй вікно", } local query = jarvis.text.strip_trigger(jarvis.context.phrase or "", triggers):lower() if query == "" then jarvis.system.notify("Switch", lang == "ru" and "Какое окно?" or "Which window?") jarvis.audio.play_error() return { chain = false } end local aliases = { ["хром"] = "chrome", ["хрома"] = "chrome", ["едж"] = "msedge", ["эдж"] = "msedge", ["файрфокс"] = "firefox", ["фаерфокс"] = "firefox", ["вскод"] = "code", ["vs code"] = "code", ["дискорд"] = "discord", ["телега"] = "telegram", ["телеграм"] = "telegram", ["стим"] = "steam", ["обс"] = "obs64", ["проводник"] = "explorer", ["блокнот"] = "notepad", ["терминал"] = "windowsterminal", ["спотифай"] = "spotify", ["яндекс"] = "browser", ["браузер"] = "browser", } local target = aliases[query] or query local ps = string.format([[ $procs = Get-Process | Where-Object { $_.MainWindowTitle -and ($_.ProcessName -like '*%s*' -or $_.MainWindowTitle -like '*%s*') } | Sort-Object -Property StartTime -Descending if ($procs.Count -eq 0) { Write-Output 'NOT_FOUND'; exit 0 } $p = $procs[0] $wsh = New-Object -ComObject WScript.Shell $null = $wsh.AppActivate($p.Id) Write-Output $p.MainWindowTitle ]], target:gsub("'", ""), target:gsub("'", "")) local res = jarvis.system.exec(string.format('powershell -NoProfile -Command "%s"', ps:gsub('"', '\\"'))) local out = (res.stdout or ""):gsub("[\r\n]+$", ""):gsub("^%s+", "") if out == "NOT_FOUND" or out == "" then jarvis.system.notify("Switch", (lang == "ru" and "Не нашёл: " or "Not found: ") .. query) jarvis.audio.play_not_found() else jarvis.system.notify(lang == "ru" and "Переключаюсь" or "Switching", out:sub(1, 80)) jarvis.audio.play_ok() end return { chain = false }