Тема: HTA: воспроизведение AVI-видео
HTA-скрипт проигрывает AVI-ролик в дочернем окне немодального диалога IE, работает только с несжатыми AVI.
Используются библиотеки dynwrap.dll и AutoItX3.dll.
Автор примера - Poltergeyst.
Во вложении поста - AVI-файл для примера воспроизведения.
<HTML>
<META HTTP-EQUIV=Content-Type content='text/html;charset=windows-1251'>
<TITLE>AVI_CLASS</TITLE>
<HEAD>
<HTA:APPLICATION
ID="AVI_CLASS"
APPLICATIONNAME="AVI_CLASS"
CAPTION="YES"
SYSMENU="YES"
MAXIMIZEBUTTON="NO"
MINIMIZEBUTTON="NO"
SINGLEINSTANCE="YES"
/>
<STYLE type=text/css>
P {border: 2px;border-style: groove;}
BODY {font-family: Lucida Console; font-size: 14px; color: white; cursor: hand;background-color: #0080ff;}
</STYLE>
</HEAD>
<BODY SCROLL="NO">
<CENTER><P>Щелкните по области окна чтобы запустить ролик</P></CENTER>
<SCRIPT>
//---------------------------------------------------------------------------------
//Нет гарантий!Используете на свой страх и риск!
//---------------------------------------------------------------------------------
//Скрипт проигрывает AVI-ролик в дочернем окне немодального диалога IE.
//Работает только с несжатыми AVI
//---------------------------------------------------------------------------------
// Lang.:JavaScript
// Используется библиотека dynwrap.dll
// Используется библиотека AutoItX3.dll,v3.2.0.1
// ОС Win98/Me
//---------------------------------------------------------------------------------
//Область объявления общих переменных и констант
//---------------------------------------------------------------------------------
var WM_USER =eval('0x0400')
var SW_SHOWNORMAL =1
//---------------------------------------------------------------------------------
//Стили окна
var WS_BORDER =eval('0x00800000')
var WS_CHILD =eval('0x40000000')
var WS_VISIBLE =eval('0x10000000')
//---------------------------------------------------------------------------------
//Сообщения для SysAnimate32
var ACS_CENTER =eval('0x0001')
var ACS_TRANSPARENT =eval('0x0002')
var ACS_AUTOPLAY =eval('0x0004')
var ACM_OPENA =WM_USER+100
var ACM_OPENW =WM_USER+103
var ACM_PLAY =WM_USER+101
var ACM_STOP =WM_USER+102
var ACN_START =1
var ACN_STOP =2
//---------------------------------------------------------------------------------
//Параметры общего назначения
dlgTitle='Воспроизведение AVI'
var aHwnd
var TIMESET_STATE
//---------------------------------------------------------------------------------
//Вызовы API
var CreateWindowExA_CALL =new ActiveXObject("DynamicWrapper")
CreateWindowExA_CALL.Register ("USER32.DLL","CreateWindowExA","i=lsslllllllll","f=s","r=h")
//---------------------------------------------------------------------------------
var SendMessage_CALL =new ActiveXObject("DynamicWrapper")
SendMessage_CALL.Register ("USER32.DLL","SendMessage","i=huuu","f=s","r=l")
//---------------------------------------------------------------------------------
var SM_CALL =new ActiveXObject("DynamicWrapper")
SM_CALL.Register ("USER32.DLL","SendMessageA","i=llls","f=s","r=l")
//---------------------------------------------------------------------------------
var ShowWindow_CALL =new ActiveXObject("DynamicWrapper")
ShowWindow_CALL.Register ("USER32.DLL","ShowWindow","i=ll","f=s","r=l")
//---------------------------------------------------------------------------------
var UpdateWindow_CALL =new ActiveXObject("DynamicWrapper")
UpdateWindow_CALL.Register ("USER32.DLL","UpdateWindow","i=l","f=s")
//---------------------------------------------------------------------------------
//Основные агрегатные объекты
var ax3 =new ActiveXObject('AutoItX3.Control')
var fsObj =new ActiveXObject('Scripting.FileSystemObject')
//---------------------------------------------------------------------------------
window.resizeTo (430,100)
window.moveTo (0,-200)
//----------------------------------------------------------
//Включение немодального диалога и изменение его параметров
wDlg=window.showModelessDialog("about: <HTML><TITLE>"+dlgTitle+"</TITLE><meta http-equiv=Content-Type content=text/html; charset=windows-1251><BODY BGCOLOR=#8000ff></BODY></HTML>")
with (wDlg.external)
{
dialogWidth =20
dialogHeight =20
dialogTop =10
dialogLeft =10
}
//----------------------------------------------------------
//Создание окна анимации
hwnd= eval('0x'+ax3.WinGetHandle(dlgTitle,''))
aHwnd=CreateWindowExA_CALL.CreateWindowExA(0,
"SysAnimate32",
"",
ACS_AUTOPLAY|ACS_CENTER|WS_BORDER|WS_CHILD|WS_VISIBLE, //ACS_CENTER|WS_BORDER|WS_CHILD|WS_VISIBLE
10,55,300,200,
hwnd,0,0,0)
ax3.sleep(100)
//----------------------------------------------------------
//Это заставит окно обновится и перерисоваться
ShowWindow_CALL.ShowWindow(hwnd,SW_SHOWNORMAL)
UpdateWindow_CALL.UpdateWindow(hwnd)
ax3.sleep(100)
ax3.WinSetState(dlgTitle,'',ax3.SW_HIDE)
ax3.sleep(200)
ax3.WinSetState(dlgTitle,'',ax3.SW_SHOW)
//----------------------------------------------------------
//Открытие AVI-клипа из текущего каталога
file=fsObj.GetFile(window.document.location.pathname).ParentFolder+'\\action.avi'
res=SM_CALL.SendMessageA(aHwnd,ACM_OPENA,0,file)
ax3.sleep(100)
//----------------------------------------------------------
//Запуск воспроизведения
//Этот набор инструкций можно отменить если присвоить окну SysAnimate32 стиль ACS_AUTOPLAY
//Тогда ролик будет проигрываться автоматически
/*
var STEP =-1 //Шаг воспроизведения
var INIT_FRAME =1 //Начальный кадр
var END_FRAME =40 //Конечный кадр
res=SendMessage_CALL.SendMessage(aHwnd,ACM_PLAY,STEP,INIT_FRAME+eval('0x10000')*END_FRAME)
ax3.sleep(100)
*/
checkAVIState()
//----------------------------------------------------------
//---------------------------------------------------------------------------------
function checkAVIState() //Проверка на существование окна с роликом
{
TIMESET_STATE=window.setTimeout('checkAVIState()',100)
if (!ax3.WinExists(dlgTitle,'')){window.moveTo(0,0);return window.clearTimeout(TIMESET_STATE)}
}
//---------------------------------------------------------------------------------
//Обработчики событий
function document.onclick() {return location.reload()}
//---------------------------------------------------------------------------------
function document.oncontextmenu() {return false}
//---------------------------------------------------------------------------------
function window.onresize() {window.resizeTo(430,100)}
//---------------------------------------------------------------------------------
//Poltergeyst
</SCRIPT>
</BODY>
</HTML>
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.