[[Переменная]] == null
Так тоже работает. В кавычки не нужно т.к. это не строка
Как записать видео работы скрипта в режиме запуска?
-
Подскажите как записать видео работы браузера в скрипте баса в режиме запуска?
Конечно же можно тыкнуть "отобразить браузер" и записывать экран любой софтиной типа camtasia\faststone. таким образом мы будем видеть что происходит в раскрытом браузере и в логе.
Но если выполнится кубик сброс то браузер конечно же исчезнет и потом если в скрипте браузер снова открывается, то он откроется в свёрнутом режиме и захват экрана уже не будет видеть "движуху" в браузере.
Самое простое Что приходит в - это костыль с помощью autohotkey который будет постоянно тыкать раскрывая браузер , но опять же это костыль(((
есть ещё такой модуль как snapshot, но он делает скрины и только на конкретных местах.
Может кто-то знает более простой вариант? мне нужно именно чтобы браузер всегда был раскрыт в режиме запуска.

-
@Nikolas Сам не пробовал, но может этот способ более норм.
Нужен автокликер с определением скриншотов (этот нашёл, но не пробовал, может есть и альтернативы).
https://github.com/fckguapp/AutoImageClicker
Если на экране будет виден этот скриншот,

то кликер сделает по нему клик. Заодно можно сделать и разворачивание браузера на весь экран.Ну, может ещё пригодится расширение для записи видео
https://chromewebstore.google.com/detail/screen-recorder/hniebljpgcogalllopnjokppmgbhadenА можно попросить разработчика сделать какой-нибудь код для запуска скрипта с развёрнутым браузером.
-
в общем Решил проблему написав autohotkeyscript. вот он . может кому-то тоже будет полезно
требует autohotkey версии v1.1.37.02
горячие клавиши запуска\паузы:
Ctrl+Alt+Pвместо :
BasPidStatic := 10696поставьте свой номер процесса из Диспетчера задач:

вместо:
BasTitleKey := "instagram_5.2"поставьте текст без разрыва на латинице который присутствует в заголовке окна вашего процесса

; ========================================================== ; BAS Keep Browser Visible — bind by PID, multi-monitor ready ; AHK v1.1.37.02 — держит окно "Браузер" раскрытым ; ========================================================== #NoEnv #SingleInstance, Force SetBatchLines, -1 SetTitleMatchMode, 2 SendMode, Input CoordMode, Mouse, Window CoordMode, Pixel, Window DetectHiddenWindows, Off ; Включаем DPI-awareness (пер-монитор). Если нет Shcore — откатываемся. DllCall("Shcore\SetProcessDpiAwareness", "Int", 2, "Int") if (ErrorLevel) DllCall("SetProcessDPIAware") ; ------------------- КОНФИГ ------------------- BasPidStatic := 10696 ; <-- твой текущий PID BAS BasTitleKey := "instagram_5.2" ; ASCII-фолбэк, если PID не найден BasWinClass := "Qt5QWindowIcon" BasExe := "BrowserAutomationStudio.exe" BrowserWinClass := "WorkerWindowClass" BrowserExe := "Worker.exe" BrowserWinTitle := "Браузер" ; файл должен быть UTF-8 with BOM TimerMs := 700 ; Координаты "Показать браузер" (клиентская область BAS) ShowLinkX := 56 ShowLinkY := 292 ; ---- Мониторы ---- ; Куда класть окно "Браузер": 0 = не трогать, 1/2/3 = номер монитора BrowserOnMonitor := 2 ; Куда переместить окно BAS: 0 = не трогать, 1/2/3 = номер монитора BasOnMonitor := 0 ; Отступы и размер "Браузер" внутри выбранного монитора (рабочая область) BrowserMarginX := 40 BrowserMarginY := 80 BrowserWidth := 520 BrowserHeight := 900 ; ----------------- /КОНФИГ -------------------- ; Глобальные gBasHwnd := "" gBasPid := 0 gBrowserHwnd := "" gOn := 0 ; --------- ГОРЯЧИЕ КЛАВИШИ ---------- ; Ctrl+Alt+P — старт/пауза мониторинга ^!p:: gOn := !gOn SetTimer, WatchLoop, % (gOn ? TimerMs : "Off") TrayTip, BAS Watcher, % (gOn ? "Мониторинг включен" : "Мониторинг выключен"), 1500, 1 return ; Ctrl+Alt+Q — выход ^!q::ExitApp ; Ctrl+Alt+C — калибровка координат "Показать браузер" (клиент BAS) ^!c:: GetBasSpec(basSpec) if (!WinExist(basSpec)) return WinActivate, %basSpec% Sleep, 120 MouseGetPos, mx, my Clipboard := mx "," my TrayTip, BAS Watcher, % "Координаты (отн. BAS): " mx "," my " скопированы", 1500, 1 return ; Ctrl+Alt+B — привязать к активному окну BAS (если PID сменился) ^!b:: WinGetClass, c, A WinGet, pname, ProcessName, A if (c = BasWinClass && pname = BasExe) { gBasHwnd := WinExist("A") WinGet, gBasPid, PID, ahk_id %gBasHwnd% BasPidStatic := gBasPid gBrowserHwnd := "" WinGetTitle, t, ahk_id %gBasHwnd% TrayTip, BAS Watcher, % "Привязан к BAS PID " gBasPid " | " t, 2000, 1 if (BasOnMonitor) MoveWindowToMonitor(gBasHwnd, BasOnMonitor) } else { TrayTip, BAS Watcher, "Активное окно не BAS", 1500, 1 } return ; Ctrl+Alt+I — показать статус ^!i:: WinGetTitle, t, ahk_id %gBasHwnd% MsgBox, 64, BAS Watcher , % "BAS PID: " gBasPid " (static=" BasPidStatic ")\nBAS HWND: " gBasHwnd "`nTitle: " t "`nBrowser HWND: " gBrowserHwnd "`nМониторинг: " (gOn ? "ON" : "OFF") return ; --------- АВТОСТАРТ ---------- Initialize() if (BasOnMonitor && IsWindowValid(gBasHwnd)) MoveWindowToMonitor(gBasHwnd, BasOnMonitor) gOn := 1 SetTimer, WatchLoop, %TimerMs% TrayTip, BAS Watcher, "Мониторинг включен (автостарт)", 1500, 1 return ; ================= ФУНКЦИИ ================= Initialize() { global BasPidStatic, BasTitleKey, BasWinClass, BasExe, gBasHwnd, gBasPid if (BasPidStatic > 0) { spec := "ahk_pid " . BasPidStatic . " ahk_class " . BasWinClass . " ahk_exe " . BasExe if (WinExist(spec)) { gBasHwnd := WinExist(spec) gBasPid := BasPidStatic return } } spec2 := BasTitleKey . " ahk_class " . BasWinClass . " ahk_exe " . BasExe if (WinExist(spec2)) { gBasHwnd := WinExist(spec2) WinGet, gBasPid, PID, ahk_id %gBasHwnd% } } GetBasSpec(ByRef out) { global gBasHwnd, BasPidStatic, BasWinClass, BasExe, BasTitleKey if (IsWindowValid(gBasHwnd)) { out := "ahk_id " . gBasHwnd return } if (BasPidStatic > 0) { out := "ahk_pid " . BasPidStatic . " ahk_class " . BasWinClass . " ahk_exe " . BasExe } else { out := BasTitleKey . " ahk_class " . BasWinClass . " ahk_exe " . BasExe } } GetParentPid(pid) { wmi := ComObjGet("winmgmts:") for p in wmi.ExecQuery("SELECT ParentProcessId FROM Win32_Process WHERE ProcessId=" pid) return p.ParentProcessId + 0 return 0 } IsWindowValid(hwnd) { if (!hwnd) return false WinGet, out, ID, ahk_id %hwnd% return (out = hwnd) } ; Рабочая область монитора N (без панели задач) GetMonitorWorkArea(idx, ByRef l, ByRef t, ByRef r, ByRef b) { SysGet, c, MonitorCount if (idx < 1 || idx > c) { l := t := r := b := "" return false } SysGet, Mon, MonitorWorkArea, %idx% l := MonLeft, t := MonTop, r := MonRight, b := MonBottom return true } ; Переместить окно в рабочую область монитора N MoveWindowToMonitor(hwnd, idx) { global BrowserMarginX, BrowserMarginY, BrowserWidth, BrowserHeight if (!IsWindowValid(hwnd)) return if (!GetMonitorWorkArea(idx, l, t, r, b)) return x := l + BrowserMarginX y := t + BrowserMarginY w := BrowserWidth h := BrowserHeight WinMove, ahk_id %hwnd%, , %x%, %y%, %w%, %h% } FindBrowserForThisBas() { global gBasPid, BrowserWinClass, BrowserExe, BrowserWinTitle if (!gBasPid) return "" ; 1) По классу+exe и ParentPID WinGet, list, List, ahk_class %BrowserWinClass% ahk_exe %BrowserExe% Loop, %list% { thisH := list%A_Index% WinGet, thisPid, PID, ahk_id %thisH% ppid := GetParentPid(thisPid) if (ppid = gBasPid) return thisH } ; 2) Фолбэк — по заголовку "Браузер" WinGet, list2, List, %BrowserWinTitle% Loop, %list2% { thisH := list2%A_Index% WinGet, thisPid, PID, ahk_id %thisH% ppid := GetParentPid(thisPid) if (ppid = gBasPid) return thisH } return "" } ClickShowInBas() { global ShowLinkX, ShowLinkY GetBasSpec(basSpec) if (!WinExist(basSpec)) return WinGet, bstate, MinMax, %basSpec% if (bstate = -1) WinRestore, %basSpec% WinActivate, %basSpec% Sleep, 120 ControlClick, x%ShowLinkX% y%ShowLinkY%, %basSpec%, , , NA } TendBrowser(hwnd) { global AlwaysOnTopOn, BrowserOnMonitor if (!hwnd) return WinGet, st, MinMax, ahk_id %hwnd% if (st = -1) WinRestore, ahk_id %hwnd% if (AlwaysOnTopOn) WinSet, AlwaysOnTop, On, ahk_id %hwnd% if (BrowserOnMonitor) MoveWindowToMonitor(hwnd, BrowserOnMonitor) } ; ================= ОСНОВНОЙ ЦИКЛ ================= WatchLoop: { global gBasHwnd, gBasPid, gBrowserHwnd, BasOnMonitor GetBasSpec(basSpec) if (!WinExist(basSpec)) { Initialize() return } if (!IsWindowValid(gBasHwnd)) gBasHwnd := WinExist(basSpec) if (!gBasPid) { WinGet, gBasPid, PID, ahk_id %gBasHwnd% if (!gBasPid) return } if (BasOnMonitor && IsWindowValid(gBasHwnd)) MoveWindowToMonitor(gBasHwnd, BasOnMonitor) if (IsWindowValid(gBrowserHwnd)) { TendBrowser(gBrowserHwnd) return } gBrowserHwnd := FindBrowserForThisBas() if (gBrowserHwnd) { TendBrowser(gBrowserHwnd) return } ClickShowInBas() Loop, 5 { Sleep, 300 gBrowserHwnd := FindBrowserForThisBas() if (gBrowserHwnd) { TendBrowser(gBrowserHwnd) break } } } return