<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: DetachVideo (из браузера - в отдельное окно)]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8063&amp;type=atom" />
	<updated>2013-03-05T04:31:03Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8063</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: DetachVideo (из браузера - в отдельное окно)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69939#p69939" />
			<content type="html"><![CDATA[<p>Нда, единственный выход, который мне видится - это использование ActiveX для загрузки страницы в окне GUI, но это совсем не то, чего хотелось бы :-(</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-03-05T04:31:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69939#p69939</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: DetachVideo (из браузера - в отдельное окно)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69938#p69938" />
			<content type="html"><![CDATA[<p>Суть &quot;Detach video&quot;, для понимания:<br /></p><div class="codebox"><pre><code>; если активно окно firefox
#IfWinActive ahk_class MozillaWindowClass
    ; при клике средней кнопкой мыши
    MButton::
        ; определим handle дочернего окна под курсором
        MouseGetPos,,,, hwndSub, 2
        ; если под курсором в окне firefox нет «классического» дочернего окна — закончим
        if !WinExist(&quot;ahk_id&quot; . hwndSub)
            return

        ; определим высоту и ширину найденного окна флеш-плеера
        ControlGetPos,,, w, h
        ; создадим новое окно, сохраним его handle в переменной hwndNewParent
        Gui +hwndhwndNewParent -Caption -Border +ToolWindow +AlwaysOnTop
        ; назначим найденному дочернему окну плеера нового «родителя» — окно созданное нами
        DllCall(&quot;SetParent&quot;, &quot;UPtr&quot;, hwndSub, &quot;UPtr&quot;, hwndNewParent)
        ; отобразим созданное окно
        Gui Show,  w%w% h%h%
        return</code></pre></div><div class="quotebox"><blockquote><p>Вероятно, там особенности кода таковы, что embedded объекты (т.е. frame/iframe) не получают classNN и своего окна.</p></blockquote></div><p>Вероятно <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[creature.ws]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26105</uri>
			</author>
			<updated>2013-03-05T02:51:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69938#p69938</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: DetachVideo (из браузера - в отдельное окно)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69937#p69937" />
			<content type="html"><![CDATA[<p>Странно, но не на всех неютубных страницах скрипт ведёт себя одинаково:<br />вот здесь: http://www.autohotkey.com/board/topic/52871-«-whats-on-your-mind-»/page-142#entry572594<br />скрипт срабатывает отлично, хотя страница не ютубная.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-03-05T01:48:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69937#p69937</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: DetachVideo (из браузера - в отдельное окно)]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=69301#p69301" />
			<content type="html"><![CDATA[<p>Есть замечательный скрипт от Skrommel&#039;a, <a href="http://www.donationcoder.com/Software/Skrommel/index.html#DetachVideo">DetachVideo</a>.</p><p>Привожу код этого скрипта, почищенный от лишнего (gui, настройки, возможность сменить hotkey, описание).</p><div class="codebox"><pre><code>#SingleInstance,Force
DetectHiddenWindows,On
SetWinDelay,0

counter=0
OnExit,EXIT
SetTimer,MOVE,500
Return

F12::
SetTimer,MOVE,Off
MouseGetPos,,,window,ctrl,2
WinGetPos,wx,wy,ww,wh,ahk_id %window%
WinGetPos,cx,cy,cw,ch,ahk_id %ctrl%
current:=counter
Loop,% counter+1
{
  If gui_%A_Index%=
  {
    current:=A_Index
    Break
  }
}
If current&gt;%counter%
  counter+=1
Gui,%current%:+AlwaysOnTop +Resize +ToolWindow +LabelAllGui 
Gui,%current%:Show,X0 Y0 W%cw% H%ch%,DetachVideo
Gui,%current%:+LastFound
gui:=WinExist(&quot;A&quot;)
parent:=DllCall(&quot;SetParent&quot;,&quot;UInt&quot;,ctrl,&quot;UInt&quot;,gui)
WinMove,ahk_id %ctrl%,,0,0 ;,%cw%,%ch%
ctrl_%current%:=ctrl
gui_%current%:=gui
parent_%current%:=parent
window_%current%:=window
w_%current%:=ww
h_%current%:=wh
SetTimer,MOVE,500
Return

MOVE:
SetTimer,MOVE,Off
Loop,%counter%
{
  ctrl:=ctrl_%A_Index%
  If ctrl=
    Continue
  IfWinExist,ahk_id %ctrl%
    WinMove,ahk_id %ctrl%,,0,0
  Else
    Gui,%A_Index%:Destroy
}
SetTimer,MOVE,500
Return

AllGuiClose:
SetTimer,MOVE,Off
ctrl:=ctrl_%A_Gui%
window:=window_%A_Gui%
DllCall(&quot;SetParent&quot;,&quot;UInt&quot;,ctrl_%A_Gui%,&quot;UInt&quot;,parent_%A_Gui%)
Gui,%A_Gui%:Destroy
WinMove,ahk_id %ctrl%,,0,0
WinMove,ahk_id %window%,,,,% w_%A_Gui%,% h_%A_Gui%+1
WinMove,ahk_id %window%,,,,% w_%A_Gui%,% h_%A_Gui%
gui_%A_Gui%=
ctrl_%A_Gui%=
parent_%A_Gui%=
SetTimer,MOVE,500
Return

EXIT:
SetTimer,MOVE,Off
Loop,%counter%
{
  ctrl:=ctrl_%A_Index%
  window:=window_%A_Index%
  If ctrl=
    Continue
  DllCall(&quot;SetParent&quot;,&quot;UInt&quot;,ctrl_%A_Index%,&quot;UInt&quot;,parent_%A_Index%)
  Gui,%A_Index%:Destroy
  WinMove,ahk_id %ctrl%,,0,0
  WinMove,ahk_id %window%,,,,% w_%A_Index%,% h_%A_Index%+1
  WinMove,ahk_id %window%,,,,% w_%A_Index%,% h_%A_Index%
}
ExitApp</code></pre></div><p><span class="postimg"><img src="http://www.donationcoder.com/Software/Skrommel/DetachVideo/DetachVideoScreen.gif" alt="http://www.donationcoder.com/Software/Skrommel/DetachVideo/DetachVideoScreen.gif" /></span><br />Скрипт работает так: заходите на ютуб, отключаете html5-плеер (скрипт работает только с плагинными видеопрогирывателями: например, flash) включаете видео, наводите курсор на него и жмёте F12. После этого видео выделяется в отдельное alwaysontop окно, так что можете переключиться на соседнюю вкладку и при этом смотреть видео.<br />По идее - скрипт кросс-браузерный и кросс-плагинный.</p><p>Проблем у скрипта несколько, но основная заключается в том, что у меня в Firefox он не работает с ютубными видео, вставленными не на ютуб страницы.</p><p>Я провёл кое-какое расследование, пытаясь выяснить причину, вот его результаты:</p><p>Это происходит из-за того, что: (строка №12)<br /></p><div class="codebox"><pre><code>MouseGetPos,,,window,ctrl,2</code></pre></div><p>ctrl пустой, потому что на неютубных страницах у плагин-контейнера, почему-то нет такого же окна, какое оно есть у ютубных страниц с проигрывателем: на ютубных страницах появляется control &#039;GeckoPluginWindow1&#039;, а на неютубных - он не появляется, взамен появляется какой-то Static1, я пробовал подставлять hwnd этого Static1 сразу после 12-ой строки, но результат плачевный: скрипт создаёт новое окно, которое:<br />а) слишком мелкого размера (а размер создаваемого окна в скрипте - наследуется от родителя же)<br />б) не содержит в себе проигрывателя (он остаётся на странице).</p><p>Почему в лисе флеш-плагин так себя ведёт - я не знаю. Вероятно, там особенности кода таковы, что embedded объекты (т.е. frame/iframe) не получают classNN и своего окна. В лисе вообще окна написаны на XUL, поэтому если глянуть на список окон, которые создаёт лиса через WinSpector - можно с ума сойти: столько их много и так бессвязано они разбросаны.</p><p>И тут у меня родилась идея как обойти эту проблему (не решить, а обойти): в ютубном флеш-плеере же есть кнопка перехода в полноэкранный режим, и при её нажатии контейнер плагина создаёт новое полноценное окно, которое видно даже на панели задач. Его размеры можно легко поменять скриптом.<br />Но возникают разные новые проблемы:<br />1. иногда случается так, что открываемое окно не терпит потери фокуса: если куда-то кликнуть мимо него - оно исчезает.<br />2. иногда оно всё таки нормально относится к тому, что оно не в фокусе, но тогда проявляется другая проблема: у этого окна постоянно сбрасывается alwaysontop, даже если его назначить вручную. Можно ведь создать прозрачное Gui окно и &quot;подложить&quot; его под окно с проигрывателем так, чтобы при назначении alwaysontop этому gui-окну прикреплённое к нему окно с проигрывателем фактически тоже становилось alwaysontop (хотя конкретно у его окна метка и будет отсутствовать)?</p><p>Помогите пожалуйста.</p>]]></content>
			<author>
				<name><![CDATA[Drugoy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27463</uri>
			</author>
			<updated>2013-02-10T09:01:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=69301#p69301</id>
		</entry>
</feed>
