Тема: JScript: Извлечение иконок из файлов ресурсов
Автор примера - Poltergeyst.
Используются библиотеки dynwrap.dll и AutoItX3.dll.
//Никаких гарантий!Используете на свой страх и риск!
//--------------------------------------------------------------------------------------------
//Данный скрипт предназначен для извлечений иконок из
//файлов ресурсов с последующим отображением этих иконок
//в действительном контексте экрана.В данном примере
//в качестве контейнера ресурсов используется shell32.dll
//--------------------------------------------------------------------------------------------
//Примечание:Интересная возможность-в случае пустого
//параметра filename будут загружены стандартные иконки.
//--------------------------------------------------------------------------------------------
//Lang.:JScript
//Используется библиотека dynwrap.dll
//Используется вспомогательная библиотека AutoItX3.dll,v3.2.0.1
//--------------------------------------------------------------------------------------------
IMAGE_ICON =1
DI_MASK =1
DI_IMAGE =2
DI_NORMAL =3
DI_COMPAT =4
DI_DEFAULTSIZE =8
//--------------------------------------------------------------------------------------------
//Вызов функции
renderResourceIcon('shell32.dll')
//--------------------------------------------------------------------------------------------
function renderResourceIcon(filename)
{
try
{
var ghost=new ActiveXObject("AutoItX3.Control")
ghost.sleep(100)
ghost.WinMinimizeAll()
ghost.sleep(100)
ghost.mouseMove(650,20)
ghost.sleep(100)
//--------------------------------------------------------------------------------------------
//Получение дескриптора общего контекста экрана или окна
dllWrap=new ActiveXObject("DynamicWrapper")
dllWrap.Register("USER32.DLL","GetWindowDC","i=h","f=s","r=h")
hDC=dllWrap.GetWindowDC(0)
dllWrap=0
ghost.sleep(100)
//--------------------------------------------------------------------------------------------
//Загрузка библиотеки содержащей графические ресурсы
dllWrap=new ActiveXObject("DynamicWrapper")
dllWrap.Register("KERNEL32.DLL","LoadLibraryA","i=s","f=s","r=l")
hLib=dllWrap.LoadLibraryA(filename)
dllWrap=0
ghost.sleep(100)
//--------------------------------------------------------------------------------------------
//Создание фоновой заливки для иконок
dllWrap=new ActiveXObject("DynamicWrapper")
dllWrap.Register("GDI32.DLL","CreateSolidBrush","i=l","f=s","r=l")
colorRef=eval('0xfbc284')
hBrush=dllWrap.CreateSolidBrush(colorRef)
dllWrap=0
ghost.sleep(100)
//--------------------------------------------------------------------------------------------
//Создание подложки
dllWrap=new ActiveXObject("DynamicWrapper")
dllWrap.Register("GDI32.DLL","Rectangle","i=luuuu","f=s","r=l")
res=dllWrap.Rectangle(hDC,2,2,610,400)
dllWrap=0
ghost.sleep(100)
//--------------------------------------------------------------------------------------------
threshold=200 //Этот параметр определяет максимальное значение
//идентификатора иконки
for (i=0,index=1,j=0;index<threshold;index++)
{
//------------------------------------------------------------------------------------
//Извлечение иконки
dllWrap=new ActiveXObject("DynamicWrapper")
dllWrap.Register("USER32.DLL","LoadImageA","i=llllll","f=s","r=l")
hIM=dllWrap.LoadImageA(
hLib, //Дескриптор модуля содержащего ресурсы
index, //Идентификатор ресурса
IMAGE_ICON, //Тип загружаемого объекта
32, //Ширина иконки
32, //Высота иконки
0) //Параметр
dllWrap=0
ghost.sleep(20)
//------------------------------------------------------------------------------------
if(hIM)
{
//Прорисовка иконки в контекст экрана или окна
dllWrap=new ActiveXObject("DynamicWrapper")
dllWrap.Register("USER32.DLL","DrawIconEx","i=lllllllll","f=s","r=l")
hIM=dllWrap.DrawIconEx(
hDC, //Дескриптор контекста
10+40*i,//Координата левого угла
10+40*j,//Координата левого угла
hIM, //Дескриптор иконки
32, //Отображаемая ширина иконки
32, //Отображаемая высота иконки
0, //Номер кадра AVI ресурса(не используется)
hBrush, //Дескриптор фоновой заливки
DI_IMAGE//Дополнительный флаг
)
dllWrap=0
ghost.sleep(20)
ghost.ToolTip( '===========================\n'+
'Иконка номер: ['+index+']\n'+
'===========================',2,400)
i++
if (i==15){i=0;j++}
}
//------------------------------------------------------------------------------------
}
//Освобождение библиотеки из памяти
dllWrap=new ActiveXObject("DynamicWrapper")
dllWrap.Register("KERNEL32.DLL","FreeLibrary","i=l","f=s")
hLib=dllWrap.FreeLibrary(hLib)
dllWrap=0
//------------------------------------------------------------------------------------
//Стандартный цикл отслеживания перемещения мыши
posX_0=ghost.MouseGetPosX()
posY_0=ghost.MouseGetPosY()
ghost.ToolTip( '===========================\n'+
'Чтобы убрать список иконок\n'+
'сдвиньте курсор мыши на\n'+
'достаточное расстояние\n'+
'===========================\n',2,400)
while (1)
{
posX=ghost.MouseGetPosX()
posY=ghost.MouseGetPosY()
if ((Math.abs(posX-posX_0)>10)||(Math.abs(posY-posY_0)>10))
{
ghost.send("{F5}")
ghost.sleep(100)
ghost.ToolTip( '===========================\n'+
'Выполнение завершено\n'+
'===========================',2,400)
ghost.sleep(1000)
WScript.Quit(0)
}
}
//--------------------------------------------------------------------------------------------
}
catch(err)
{
errorHandler(err)
}
}
//--------------------------------------------------------------------------------------------
function errorHandler(err)
{
erroDesc= "Произошла ошибка:\n"+
"Номер: "+err.number+'.\n'+
"Описание: "+err.description+'.'
WScript.Echo(erroDesc)
WScript.Quit(0)
}
//--------------------------------------------------------------------------------------------
//Примерно таким же путем,при создании скриптовых проектов,возможно извлекать из файлов
//ресурсов курсоры и графические изображения.
//--------------------------------------------------------------------------------------------
//poltergeyst
Предложения в русском языке начинаются с большой буквы и заканчиваются точкой.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.