Решил для своей программы использовать скины из UDF SkinH.au3. (За неумением создавать свои - эти в самый раз). При загрузке из файла все работает отлично. Но один скин мне нужно сделать скином по умолчанию - чтобы он грузился из ресурсов скрипта при старте программы и сразу аттачился. (добавлял через
В ресурсах он появляется).
В скрипте для загрузки использую такой код
В результат получаю в мессидже - результат 1. То есть все прочие этапы (загрузка скина в структуру, получение размеров и указателя на структуру - проходят нормально). Но _SkinH_AttachEx выдает ошибку. Если кто-то использовал эту библиотеку и имел удачный опыт загрузки скинов из ресурсов - просьба поделиться опытом
PS: В SkinH.au3 есть еще функция _SkinH_AttachResEx - но как с ней работать - я так и не понял.
Код:
#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 выдает ошибку. Если кто-то использовал эту библиотеку и имел удачный опыт загрузки скинов из ресурсов - просьба поделиться опытом
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