Что нового

Приаттачить скин из ресурса с помощью _SkinH_AttachRes

erlik

Продвинутый
Сообщения
317
Репутация
84
Решил для своей программы использовать скины из UDF SkinH.au3. (За неумением создавать свои - эти в самый раз). При загрузке из файла все работает отлично. Но один скин мне нужно сделать скином по умолчанию - чтобы он грузился из ресурсов скрипта при старте программы и сразу аттачился. (добавлял через
Код:
#AutoIt3Wrapper_Res_File_Add=F:\Install\AutoIT3\Scripts\skins\asus.she, data, skin

В ресурсах он появляется).

В скрипте для загрузки использую такой код
Код:
Func SetSkin()
    _SkinH_Init(@ScriptDir, 0)
	If @compiled Then
	Dim $aRet[2]
	Local $tByte=_LoadResourceData(_WinAPI_GetModuleHandle(0), "data", "skin")
	$aRet[0]= @extended
	If Not IsDllStruct($tByte) Then 
		Return MsgBox(0,"","Не структура"&@CRLF&"Размер="&@extended&"|Результат="&$tByte&"|error="&@error)
	Else
	MsgBox(0,"","Cтруктура"&@CRLF&"Размер="&$aRet[0]&"|error="&@error)
	EndIf
	$aRet[1] = DllStructGetPtr($tByte)
	If $aRet[1]=0 Then Return MsgBox(0,"","Ошибка получения указателя="&@error)
	Local $Ret=_SkinH_AttachRes($aRet[1], $aRet[0], 0,0,0); _SkinH_AttachRes($pShe, $dwSize, $Hue, $Sat, $Bri, $sPwd = "mhgd") ; 0 if success, <> 0 if error
	MsgBox(0,"","Результат="& $Ret); в итоге возвращает 1 
	Else
	_SkinH_AttachEx($sSkinListDir & '\' & $sDeafaultSkin)
	EndIf
EndFunc

; функция от Yashied из FAQ по ресурсам
Func _LoadResourceData($hInstance, $sResType, $sResName, $iResLanguage = 0)

    Local $hInfo, $hData, $pData, $iSize

    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, "")
    EndIf
    Return SetError(0, $iSize, DllStructCreate("byte[" & $iSize & "]", $pData))
EndFunc   ;==>_LoadResourceData


;Сама функция _SkinH_AttachEx  (вставил сюда для наглядности).
;************************************************* ***********************
; * Features: Loads given file as ressource, and setup hue, saturation, and brightness
; * Returns: 0 if success, <> 0 if error
;************************************************* ***********************
Func _SkinH_AttachRes($pShe, $dwSize, $Hue, $Sat, $Bri, $sPwd = "mhgd")
	Local $aRet = DllCall($__SkinH_DLL, "int", "SkinH_AttachRes", "BYTE*", $pShe, "dword", $dwSize, "str", $sPwd, "int", $Hue, "int", $Sat, "int", $Bri)
	Return $aRet[0]
EndFunc   ;==>_SkinH_AttachRes


В результат получаю в мессидже - результат 1. То есть все прочие этапы (загрузка скина в структуру, получение размеров и указателя на структуру - проходят нормально). Но _SkinH_AttachEx выдает ошибку. Если кто-то использовал эту библиотеку и имел удачный опыт загрузки скинов из ресурсов - просьба поделиться опытом :smile:
PS: В SkinH.au3 есть еще функция _SkinH_AttachResEx - но как с ней работать - я так и не понял.
Код:
;************************************************* ***********************
; * Features: Loads given file as ressource, and setup hue, saturation, and brightness
; * Returns: 0 if success, <> 0 if error
;************************************************* ***********************
Func _SkinH_AttachResEx($SkinFilePath, $Type, $Hue, $Sat, $Bri, $sPwd = "mhgd")
	Local $aRet = DllCall($__SkinH_DLL, "int", "SkinH_AttachResEx", "str", $SkinFilePath, "str", $Type, "str", $sPwd, "int", $Hue, "int", $Sat, "int", $Bri)
	Return $aRet[0]
EndFunc   ;==>_SkinH_AttachResEx
 
Верх