Что нового

.png + AutoIt3Wrapper + компиляция

saraconor

Новичок
Сообщения
404
Репутация
3
Помогите пожалуйста:
во вложении картинка png, как с помощью #AutoIt3Wrapper_Res_File_Add заставить ее появиться на секунду в виде окна с прозрачностью поверх всех окон а потом пропасть? так чтобы картинка была в файле (никуда не распаковывалась) и работала как в скомпилированном так и нет виде?
 

Вложения

  • Warning1.png
    Warning1.png
    36.7 КБ · Просмотры: 12

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
В архиве пример и библиотека Icons
Код:
;##addres=Warning.png|png|Warning     ;http://autoit-script.ru/index.php?topic=17953.0

#AutoIt3Wrapper_Res_File_Add=Warning.png,png,Warning

#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <GDIPlus.au3>
#include <Icons.au3>
#include <WinAPIEX.au3>
$Form1 = GUICreate("", 381, 81, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_LAYERED))
GUISetBkColor(0xFFFFFE)
$PicBack = GUICtrlCreatePic('', 0, 0, 381, 81)
GUICtrlSetState(-1, $GUI_DISABLE)
_WinAPI_SetLayeredWindowAttributes($Form1, 0xFFFFFE, 255)
GUISetState()
If Not @Compiled Then
	_SetImage($PicBack, @ScriptDir & '\Warning.png')
Else
	$hInstance = _WinAPI_GetModuleHandle(0)
	_GDIPlus_Startup()
	$hImage = _LoadResourceImage($hInstance, 'png', "Warning")
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
	_GDIPlus_ImageDispose($hImage)
	_SetHImage($PicBack, $hBitmap)
	_WinAPI_DeleteObject($hBitmap)
	_GDIPlus_Shutdown()
EndIf

Sleep(5000)

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
 

Вложения

  • Ex.7z
    44.9 КБ · Просмотры: 15
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
Спасибо, а код обязательно должен быть таким большим, можно ли его уменьшить удалив проверки на ошибки и другие не влияющие на основную функцию части кода?
 

joiner

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