1

Тема: 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>
Post's attachments

action.zip 81.25 kb, 425 downloads since 2008-03-13 

You don't have the permssions to download the attachments of this post.
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.