Что нового

ошибка при запуске скрипта картинок с помощью #Region

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Скопировал пример к себе на компьютер, установил дополнительные библиотеки из шапки темы. но выдает ошибку функции которой даже нету

это пример скопированный
Код:
#Region
#AutoIt3Wrapper_Res_File_Add=CrashXP.bmp, 2, 200
#AutoIt3Wrapper_Res_File_Add=NVIDIA.png, PNG, NVIDIA
#EndRegion

#Include <GDIPlus.au3>
#Include <Icons.au3>
#Include <WinAPIEx.au3>

GUICreate("MyProg", 640, 480)
$Pic1 = GUICtrlCreatePic("", 0, 0, 640, 480)
$Pic2 = GUICtrlCreatePic("", 237, 157, 166, 166)
$hInstance = _WinAPI_GetModuleHandle(0)
$hBitmap = _WinAPI_LoadBitmap($hInstance, 200)
_SetHImage($Pic1, $hBitmap)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_Startup()
$hImage = _LoadResourceImage($hInstance, "PNG", "NVIDIA")
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
_SetHImage($Pic2, $hBitmap)
_WinAPI_DeleteObject($hBitmap)
GUISetState()

Do
Until GUIGetMsg() = -3

Func _LoadResourceImage($hInstance, $sResType, $sResName, $iResLanguage = 0)

    Local $hInfo, $hData, $pData, $iSize, $hMem, $pMem, $hStream, $hImage

    If $iResLanguage Then
        $hInfo = _WinAPI_FindResourceEx($hInstance, $sResType, $sResName, $iResLanguage)
    Else
        $hInfo = _WinAPI_FindResource($hInstance, $sResType, $sResName)
    EndIf
    $hData = _WinAPI_LoadResource($hInstance, $hInfo)
    $iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
    $pData = _WinAPI_LockResource($hData)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    $hMem = DllCall("kernel32.dll", "ptr", "GlobalAlloc", "uint", 2, "ulong_ptr", $iSize)
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    $pMem = DllCall("kernel32.dll", "ptr", "GlobalLock", "ptr", $hMem[0])
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    DllCall("kernel32.dll", "none", "RtlMoveMemory", "ptr", $pMem[0], "ptr", $pData, "ulong_ptr", $iSize)
    DllCall("kernel32.dll", "int", "GlobalUnlock", "ptr", $hMem[0])
    $hStream = _WinAPI_CreateStreamOnHGlobal($hMem[0])
    If @error Then
        Return SetError(1, 0, 0)
    EndIf
    _GDIPlus_Startup()
    $hImage = DllCall("gdiplus.dll", "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "ptr*", 0)
    If (@error) Or ($hImage[0]) Or (Not $hImage[2]) Then
        $hImage = 0
    EndIf
    _GDIPlus_Shutdown()
    DllCall("kernel32.dll", "ptr", "GlobalFree", "ptr", $hMem[0])
    If Not IsArray($hImage) Then
        Return SetError(1, 0, 0)
    EndIf
    Return $hImage[2]
EndFunc   ;==>_LoadResourceImage


А это ошибка
Код:
>"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\User\Desktop\Тест\новая версия\ГРОМ2.au3"    
"C:\Program Files (x86)\AutoIt3\Include\WinAPIEx.au3" (1084) : ==> Duplicate function name.:
Func _WinAPI_AbortPath($hDC)

>Exit code: 1    Time: 0.4153

подскажите, что не так пожалуйста
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
полнстью снес и установил заного autoit

скрипт запустился и как он думает, работает нормально, но картинки не появились

да кстати, пример отсюда http://autoit-script.ru/index.php?topic=2849.0#post_13

Добавление:
Если в библиотеку добавлять это http://autoit-script.ru/index.php/topic,47.0.html то ошибка вновь возникает

И если это важно версия у меня 3.3.13.20


Добавлено:
Сообщение автоматически объединено:

более менее перевел приложенную доп.справку к новой библиотеке, смысл понятен, но не до конца ясно почему скрипт возмущается тому чего нет, возможно нужно эту строку куда то добавить?

вобщем лично у меня мозги уже расплавились и я прошу помощи профессионалов
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
VermanVendetta13
Расскажите по действиям, как вы выполняли пример.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Garrett сказал(а):
VermanVendetta13
Расскажите по действиям, как вы выполняли пример.

1) скопировал пример и скачал картинки
2) засунул его в scite
3) увидил что не работает
4) скачал библиотеку icons.au3 и положил в директорию include
5) заработало, но картинки не появлялись
6) скачал библиотеку winapiex.au3 и все что в комплекте и положил в директорию include
7) началась ошибка
8 ) я решил что испортил autoit и полностью удалил его из системы, а затем установил бета версию 3.3.13.20
9) ошибка выдаваться перестала но и картинки так де в GUI не появились
10) в доп. Библиотеке 4 файла au3, я сделал бекап папки include и скопировал туда те 4 файла, ошибка вновь выдалась и я сделал бекап. Ошибка пропала но картинки не появились
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
VermanVendetta13
Для версии AutoIt 3.3.12.0 нужна только Icons.au3 и картинки. Картинки положить в папку со скриптом. В Icons.au3 нужно заменить все $ghGDIPDll на $__g_hGDIPDll. Затем скрипт скомпилировать и запустить exe-файл.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
InnI сказал(а):
VermanVendetta13
Для версии AutoIt 3.3.12.0 нужна только Icons.au3 и картинки. Картинки положить в папку со скриптом. В Icons.au3 нужно заменить все $ghGDIPDll на $__g_hGDIPDll. Затем скрипт скомпилировать и запустить exe-файл.

Заменил, скомпилировал, но всё равно картинка не отображается
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
InnI [?]
В Icons.au3 нужно заменить все $ghGDIPDll на $__g_hGDIPDll.
не обязательно переименовывать. я задекларировал в самой библиотеке глобальную переменную с именем
Код:
Global $ghGDIPDll = 0

и нужно скомпилировать скрипт через AutoIT3Wrapper. в Scite это строка Compile
чтобы картинки отображались без компиляции,то нужно продублировать функции установки картинки. то есть дополнительно использовать функции
_SetImage
Исходя из этого пишем в скрипте
Код:
GUICreate("MyProg", 640, 480)
$Pic1 = GUICtrlCreatePic("", 0, 0, 640, 480)
$Pic2 = GUICtrlCreatePic("", 237, 157, 166, 166)
If Not @Compiled Then
	_SetImage($Pic1, @ScriptDir & '\CrashXP.bmp')
	_SetImage($Pic2, @ScriptDir & '\NVIDIA.png')
Else
	$hInstance = _WinAPI_GetModuleHandle(0)
	$hBitmap = _WinAPI_LoadBitmap($hInstance, 200)
	_SetHImage($Pic1, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
	_GDIPlus_Startup()
	$hImage = _LoadResourceImage($hInstance, "PNG", "NVIDIA")
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
	_SetHImage($Pic2, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
EndIf
GUISetState()
тогда при запуске без компиляции(в редакторе Scite) мы можем посмотреть как будет выглядеть окно
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
joiner сказал(а):
InnI [?]
В Icons.au3 нужно заменить все $ghGDIPDll на $__g_hGDIPDll.
не обязательно переименовывать. я задекларировал в самой библиотеке глобальную переменную с именем
Код:
Global $ghGDIPDll = 0

и нужно скомпилировать скрипт через AutoIT3Wrapper. в Scite это строка Compile
чтобы картинки отображались без компиляции,то нужно продублировать функции установки картинки. то есть дополнительно использовать функции
_SetImage
Исходя из этого пишем в скрипте
Код:
GUICreate("MyProg", 640, 480)
$Pic1 = GUICtrlCreatePic("", 0, 0, 640, 480)
$Pic2 = GUICtrlCreatePic("", 237, 157, 166, 166)
If Not @Compiled Then
	_SetImage($Pic1, @ScriptDir & '\CrashXP.bmp')
	_SetImage($Pic2, @ScriptDir & '\NVIDIA.png')
Else
	$hInstance = _WinAPI_GetModuleHandle(0)
	$hBitmap = _WinAPI_LoadBitmap($hInstance, 200)
	_SetHImage($Pic1, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
	_GDIPlus_Startup()
	$hImage = _LoadResourceImage($hInstance, "PNG", "NVIDIA")
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
	_SetHImage($Pic2, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
EndIf
GUISetState()
тогда при запуске без компиляции(в редакторе Scite) мы можем посмотреть как будет выглядеть окно

ну теперь запустилось, и сразу через долю секунды закрывается
но никак не пойму что делать с wrapper? я об этой команде нигде ничего найти не могу
и только что скачал созданный вами этот файл http://autoit-script.ru/index.php?topic=17953.0
но и там у меня ничего не открывается

извините меня если я слишком туплю, но можно чутка поподробнее

попробовал скомпилировать по инструкции через контекстное меню, компиляция проходит но при запуске выдает "line 19372"
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
AutoIT 3.3.12.0
Код:
#Region
#AutoIt3Wrapper_Res_File_Add=CrashXP.bmp, 2, 200
#AutoIt3Wrapper_Res_File_Add=NVIDIA.png, PNG, NVIDIA
#EndRegion

#include <GDIPlus.au3>
#include <Icons.au3>
#include <WinAPIEx.au3>

GUICreate("MyProg", 640, 480)
$Pic1 = GUICtrlCreatePic("", 0, 0, 640, 480)
$Pic2 = GUICtrlCreatePic("", 237, 157, 166, 166)
If Not @Compiled Then
	_SetImage($Pic1, @ScriptDir & '\CrashXP.bmp')
	_SetImage($Pic2, @ScriptDir & '\NVIDIA.png')
Else
	$hInstance = _WinAPI_GetModuleHandle(0)
	$hBitmap = _WinAPI_LoadBitmap($hInstance, 200)
	_SetHImage($Pic1, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
	_GDIPlus_Startup()
	$hImage = _LoadResourceImage($hInstance, "PNG", "NVIDIA")
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_GDIPlus_ImageDispose($hImage)
	_GDIPlus_Shutdown()
	_SetHImage($Pic2, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
EndIf
GUISetState()

Do
Until GUIGetMsg() = -3

Func _LoadResourceImage($hInstance, $sResType, $sResName, $iResLanguage = 0)

	Local $hInfo, $hData, $pData, $iSize, $hMem, $pMem, $hStream, $hImage

	If $iResLanguage Then
		$hInfo = _WinAPI_FindResourceEx($hInstance, $sResType, $sResName, $iResLanguage)
	Else
		$hInfo = _WinAPI_FindResource($hInstance, $sResType, $sResName)
	EndIf
	$hData = _WinAPI_LoadResource($hInstance, $hInfo)
	$iSize = _WinAPI_SizeOfResource($hInstance, $hInfo)
	$pData = _WinAPI_LockResource($hData)
	If @error Then
		Return SetError(1, 0, 0)
	EndIf
	$hMem = DllCall("kernel32.dll", "ptr", "GlobalAlloc", "uint", 2, "ulong_ptr", $iSize)
	If @error Then
		Return SetError(1, 0, 0)
	EndIf
	$pMem = DllCall("kernel32.dll", "ptr", "GlobalLock", "ptr", $hMem[0])
	If @error Then
		Return SetError(1, 0, 0)
	EndIf
	DllCall("kernel32.dll", "none", "RtlMoveMemory", "ptr", $pMem[0], "ptr", $pData, "ulong_ptr", $iSize)
	DllCall("kernel32.dll", "int", "GlobalUnlock", "ptr", $hMem[0])
	$hStream = _WinAPI_CreateStreamOnHGlobal($hMem[0])
	If @error Then
		Return SetError(1, 0, 0)
	EndIf
	_GDIPlus_Startup()
	$hImage = DllCall("gdiplus.dll", "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "ptr*", 0)
	If (@error) Or ($hImage[0]) Or (Not $hImage[2]) Then
		$hImage = 0
	EndIf
	_GDIPlus_Shutdown()
	DllCall("kernel32.dll", "ptr", "GlobalFree", "ptr", $hMem[0])
	If Not IsArray($hImage) Then
		Return SetError(1, 0, 0)
	EndIf
	Return $hImage[2]
EndFunc   ;==>_LoadResourceImage
в папке со скриптом должны быть файлы Icons.au3 , CrashXP.bmp, NVIDIA.png
во вложении библиотека Icons.au3
 

Вложения

  • Icons.au3
    41.9 КБ · Просмотры: 2
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Joiner, всё так то хорошо, спасибо, но так и не ясно с компиляцией. Скомпилированный скрипт через wrapper из контекстного меню открывается, но изображений в exe нету. Только в au3

А файлы и в папке и во вложении есть
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
VermanVendetta13
не следует браться за сложное, если непонятно простое. в редакторе нажать верхнюю строку , откроется окно враппера. дальше - компиляция. все прекрасно работает. ну не видео же делать :smile:, чтобы показать что да как.
разбирайся. заставь мозги кипеть, а не булькать
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
VermanVendetta13
через wrapper из контекстного меню
Это не тот. Вам нужно установить полную версию SciTE, открыть скрипт в этом редакторе и выбрать в главном меню "Tools - Compile Ctrl+F7". Откроется окно AutoIt3Wrapper - вот он вам нужен.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Всеееее))))

Разобрался!! Все заработало!!

Спасибо InnI! Спасибо joiner! Спасибо всем кто даже пытался помочь!
С полной версией сразу же во всем разобрался! :laugh:
:IL_AutoIt_1: Ребят, я вас обожаю!
 
Верх