Войти

Показать полную графическую версию : [решено] Включить полноэкранный режим в Google Chrome


Cem
28-05-2016, 17:57
Доброго времени суток, уважаемые форумчане! Столкнулся с такой проблемой: Необходимо включать/выключать полноэкранный режим в Google Chrome. Штатно это делается горячей клавишей F11, что собственно натолкнуло на мысли - примеры ниже

HotKeySet("+{NUMPADADD}", "_Chrome")
_Chrome()
While 1
Sleep(100)
WEnd
Func _Chrome()
$hChrom = WinGetHandle("[CLASS:Chrome_WidgetWin_1]")
WinActivate($hChrom)
WinWaitActive($hChrom)
Send("{F11}")
EndFunc


#include <WinAPIProc.au3>
HotKeySet("+{NUMPADADD}", "_Chrome")
_Chrome()
While 1
Sleep(100)
WEnd
Func _Chrome()
Local $aData = _WinAPI_EnumProcessWindows(ProcessExists('chrome.exe'))
WinActivate($aData[1][0])
WinWaitActive($aData[1][0])
ControlSend($aData[1][0], "", "", "{F11}")
EndFunc

Однако, Send и даже ControlSend не всегда срабатывают так как надо и в те моменты, когда эмуляция нажатия "F11" не достигает цели, сбивается вся очередность (вкл/выкл) полноэкранного режима.
Хотелось бы найти более элегантное решение, чем эмуляция клавиатурных нажатий в активное окно. (ControlSend чего-то тоже работает только с активным окном).
Смотрел в сторону ключа Google Chrome --kiosk, но пока не совсем понимаю как с этим работать. Запускается Хром в полноэкранном режиме, но вот выйти из этого режима не предоставляется возможным.
Может есть возможность "на лету" изменять параметры Хрома для вкл/выкл полноэкранного режима? Либо конкретно указывать Хрому - сейчас должен работать в полноэкранном режиме, а сейчас - нет! Может кто сталкивался?

Iska
28-05-2016, 18:07
Cem, для начала попробуйте проверять результаты исполнения функций. Сейчас они у Вас попросту «висят в воздухе».

Смотрел в сторону ключа Google Chrome --kiosk, но пока не совсем понимаю как с этим работать. »
Вам же не терминал на банкомате нужен?

Cem
28-05-2016, 19:27
Cem, для начала попробуйте проверять результаты исполнения функций. Сейчас они у Вас попросту «висят в воздухе».
»
Исправил. Функция будет запускаться по нажатию горячих клавиш "Shift"+"NumPad+".
Алгоритм работы:
Запустил скрипт -> Google Chrome перешел в полноэкранный режим
Нажал "Shift"+"NumPad+" -> Google Chrome вышел из полноэкранного режима
Еще раз нажал "Shift"+"NumPad+" -> Google Chrome снова перешел в полноэкранный режим.
и т.д.
Вам же не терминал на банкомате нужен? »
Нет не для банкомата. Вообще всегда думал, что в банкоматах InternetExplorer используется.

Iska
28-05-2016, 19:56
Боюсь, Вы меня не поняли. Открывайте, например, Функция WinActivate (http://autoit-script.ru/autoit3_docs/functions/WinActivate.htm), читайте раздел «Возвращаемое значение». Проверяйте это возвращаемое значение по каждой значимой функции.

Cem
28-05-2016, 22:46
Вот добавил в код проверки:
#include <WinAPIProc.au3>
HotKeySet("+{NUMPADADD}", "_Chrome")
_Chrome()
While 1
Sleep(100)
WEnd
Func _Chrome()
If ProcessExists('chrome.exe')<>0 Then
Local $aData = _WinAPI_EnumProcessWindows(ProcessExists('chrome.exe'))
$Data1=WinActivate($aData[1][0])
If $Data1<>0 Then
ControlSend($Data1, "", "", "{F11}")
Else
$Data2=WinWaitActive($Data1)
ControlSend($Data2, "", "", "{F11}")
EndIf
ElseIf ProcessExists('chrome.exe')=0 Then
MsgBox(0, "", "Запустить Хром и т.д.")

EndIf
EndFunc

Все равно функция работает нестабильно.

Да и вопрос стоял изначально в том, чтобы не высылать эмуляцию нажатия "F11" в окно, а решить это другим способом.

Iska
29-05-2016, 01:22
а решить это другим способом. »
Каким именно? Chrome не даёт возможностей Automation, в отличие от того же IE.

Можете попробовать поиграться с Chrome UDF - AutoIt Example Scripts - AutoIt Forums (https://www.autoitscript.com/forum/topic/154439-chrome-udf/), но это потребует установки расширения в Chrome. Зато после этого, полагаю, получите доступ ко внутренностям браузера, и можно будет попробовать поиграться с таким jquery - Set window to fullscreen (REAL fullscreen; F11 functionality) by javascript - Stack Overflow (http://stackoverflow.com/questions/7179535/set-window-to-fullscreen-real-fullscreen-f11-functionality-by-javascript):
// Webkit (works in Safari and Chrome Canary)
element.webkitRequestFullScreen();
document.webkitCancelFullScreen();

Cem
29-05-2016, 08:00
Chrome UDF, конечно, круто, но с "AutoIT for Google Chrome.crx" глубокая печаль. Банится хромом на раз (даже в DEV режиме).
Зато нашел на просторах решение от Yashied:
https://autoit-script.ru/index.php?topic=4476.msg32353#msg32353
HotKeySet("+{NUMPADADD}", "_Chrome")
_Chrome()
While 1
Sleep(100)
WEnd

Func _Chrome()
$List = WinList('[CLASS:Chrome_WidgetWin_1]')
For $i = 1 To UBound($List) - 1
If BitAND(WinGetState($List[$i][1]), 2) Then
$hWnd=WinActivate($List[$i][1])
ControlSend($hWnd, "", "", "{F11}")
ExitLoop
EndIf
Next
EndFunc

В таком виде функция работает стабильно. Соответственно результат достигнут. Не вижу целесообразности искать еще какое-то химерное, труднореализуемое решение, когда есть стабильно работающий и простой код. Думаю, тему можно считать решенной.




© OSzone.net 2001-2012