Скрипт создает окно прогресс-бара (индикатора состояния) в родительском окне немодального диалога IE. HTA-приложение:
<HTML>
<META HTTP-EQUIV=Content-Type content='text/html;charset=windows-1251'>
<TITLE>PROGRESS_CLASS</TITLE>
<HEAD>
<HTA:APPLICATION
ID="PROGRESS_CLASS"
APPLICATIONNAME="PROGRESS_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>
//---------------------------------------------------------------------------------
//Нет гарантий!Используете на свой страх и риск!
//---------------------------------------------------------------------------------
//Скрипт создает окно прогресс-бара(индикатора состояния),
//в родительском окне немодального диалога IE.
//---------------------------------------------------------------------------------
// 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')
//---------------------------------------------------------------------------------
//Стили и сообщения для msctls_progressbar32
var PBS_SMOOTH =1
var PBS_VERTICAL =4
var PBM_SETRANGE =WM_USER + 1
var PBM_SETPOS =WM_USER + 2
var PBM_DELTAPOS =WM_USER + 3
var PBM_SETSTEP =WM_USER + 4
var PBM_STEPIT =WM_USER + 5
var PBM_SETRANGE32 =WM_USER + 5
var PBM_GETRANGE =WM_USER + 7
var PBM_GETPOS =WM_USER + 8
var PBM_SETBARCOLOR =WM_USER + 9
var PBM_SETBKCOLOR =eval('0x2000') + 1
//---------------------------------------------------------------------------------
//Параметры общего назначения
dlgTitle='Установка прогресса'
var wDlg
var pHwnd
var TIMESET_PRG
var PRG_STEP
//---------------------------------------------------------------------------------
//Вызовы 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 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')
//---------------------------------------------------------------------------------
runProgress() //Пуск
//---------------------------------------------------------------------------------
function moveProgress() //Изменение состояния прогресса
{
TIMESET_PRG=window.setTimeout('moveProgress()',100)
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//Здесь может содержаться набор инструкций
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
SendMessage_CALL.SendMessage(pHwnd,PBM_SETPOS,PRG_STEP,0)
ax3.WinSetTitle (dlgTitle,'',dlgTitle+'-Выполнено '+PRG_STEP+'%')
PRG_STEP++
if (!ax3.WinExists(dlgTitle,'')) {window.moveTo(0,0);return window.clearTimeout(TIMESET_PRG)}
if (PRG_STEP>100) {wDlg.external.close();window.moveTo(0,0);return window.clearTimeout(TIMESET_PRG)}
}
//---------------------------------------------------------------------------------
function runProgress() //Набор стартовых инструкций
{
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 =Math.floor(window.screen.width/16)-1
dialogHeight =80/16
dialogTop =Math.floor(window.screen.height/2)-160
dialogLeft =8
}
ax3.sleep(100)
//----------------------------------------------------------
//Создание окна прогресс-бара
hwnd= eval('0x'+ax3.WinGetHandle(dlgTitle,''))
pHwnd=CreateWindowExA_CALL.CreateWindowExA(0,
"msctls_progress32",
"",
WS_BORDER|WS_CHILD|WS_VISIBLE,
5,10,window.screen.width-40,25,
hwnd,0,0,0)
ax3.sleep(100)
//----------------------------------------------------------
//Установка параметров прогресс-бара
SendMessage_CALL.SendMessage(pHwnd,PBM_SETBKCOLOR ,0,eval('0xffffff'))
SendMessage_CALL.SendMessage(pHwnd,PBM_SETBARCOLOR ,0,eval('0xff8000'))
SendMessage_CALL.SendMessage(pHwnd,PBM_SETRANGE ,0,65536*100)
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)
//----------------------------------------------------------
PRG_STEP=0
return moveProgress()
}
//---------------------------------------------------------------------------------
//Обработчики событий
function document.onclick() {return runProgress()}
//---------------------------------------------------------------------------------
function document.oncontextmenu() {return false}
//---------------------------------------------------------------------------------
function window.onresize() {window.resizeTo(430,100)}
//---------------------------------------------------------------------------------
//Poltergeyst
</SCRIPT>
</BODY>
</HTML>
Используются библиотеки dynwrap.dll и AutoItX3.dll.
Автор примера - Poltergeyst.
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.