perfaram Posted February 17, 2014 Posted February 17, 2014 Hi all ! I'm trying to use some icons from a resource DLL that I created. The icons will be used with the ITaskBarList UDF, as button icon and as overlay icon (like that : BUT... I don't know how to do I read a lot, but I can't find any working way to do it. Note that it works perfectly without DLL ! The SetOverlayIcon (included in ITaskBarList.au3) : expandcollapse popup; #FUNCTION# ==================================================================================================== ; Name...........: _ITaskBar_SetOverlayIcon ; Description....: Applies an overlay to a taskbar button to indicate application status or a notification to the user. ; Syntax.........: _ITaskBar_SetOverlayIcon($hGui, $hIcon = 0, $sDescription = '') ; Parameters.....: $hGui - Handle to Gui ; $hIcon - [Optional] - The handle of an icon to use as the overlay. ; $sDescription - [Optional] - alt text version of the information conveyed by the overlay, for accessibility purposes. ; Return values..: Success - 1 ; Failure - 0 and sets @error to HRESULT error code or: ; 1 - File Icon does not exist ; 2 - Failed loading icon image. ; Author.........: Brian J Christy (Beege) ; Remarks........: The icon should be a small icon, measuring 16x16 pixels at 96 dpi. If the taskbar is configured ; through Taskbar and Start Menu Properties to show small icons, overlays cannot be applied and calls ; to this method are ignored ; =============================================================================================================== Func _ITaskBar_SetOverlayIcon($hGui, $hIcon = 0, $sDescription = '') If $hIcon And Not IsPtr($hIcon) Then If Not FileExists($hIcon) Then Return SetError(1, 0, 0) If StringRight($hIcon, 3) = 'exe' Then $hIcon = __GetEXEIconHandle($hIcon) If @error Then Return SetError(2, 0, 0) Else $hIcon = _WinAPI_LoadImage(0, $hIcon, $IMAGE_ICON, 16, 16, $LR_LOADFROMFILE) If @error Then Return SetError(2, 0, 0) EndIf EndIf Local $iRet = $g_ITBL_oTaskBar.SetOverlayIcon($hGui, $hIcon, $sDescription) If IsPtr($hIcon) Then _WinAPI_DestroyIcon($hIcon) If $iRet Then Return SetError($iRet, 0, 0) Return 1 EndFunc ;==>_ITaskBar_SetOverlayIcon My code : $ovicn1=_ResourceGetAsImage('TICO1', $RT_ICON, @ScriptDir & "\res\LOUP_data.dll") _ITaskBar_SetOverlayIcon($maingui, $ovicn1) I can use the other resources of the DLL, as translation files or PNG files. Thanks in advance Never forget to mark a question as resolved, this button has been purposely created :-P
perfaram Posted February 19, 2014 Author Posted February 19, 2014 Anyone ? Never forget to mark a question as resolved, this button has been purposely created :-P
perfaram Posted February 20, 2014 Author Posted February 20, 2014 OK, think I found it... but cannot test it right now (nor I will tomorrow) I'll tell you ASAP Never forget to mark a question as resolved, this button has been purposely created :-P
perfaram Posted February 21, 2014 Author Posted February 21, 2014 (edited) OK ! I added this func in ITaskBarList.au3 : Func __GetDLLIconHandle($sPath, $dIndex) Local $Icon = DllStructCreate("handle") $iIcon = _WinAPI_ExtractIconEx($sPath, $dIndex, 0, DllStructGetPtr($Icon), 1) If @error Then Return SetError(1, 0, 0) Return DllStructGetData($Icon, 1) EndFunc ;==>__GetEXEIconHandle It extracts the icon at the specified index in a DLL, and returns the handle to it. Then, replace the part beginning with If $hIcon <> -1 And Not IsPtr($hIcon) Then In CreateButton and SetOverlayIcon by this : If $hIcon <> -1 And Not IsPtr($hIcon) Then If Not FileExists($hIcon) Then Return SetError(1, 0, 0) If StringRight($hIcon, 3) = 'exe' Then $hIcon = __GetEXEIconHandle($hIcon) If @error Then Return SetError(2, 0, 0) ElseIf StringRight($hIcon, 3) = 'dll' Then $hIcon = __GetDLLIconHandle($hIcon, $dind) If @error Then Return SetError(2, 0, 0) Else $hIcon = _WinAPI_LoadImage(0, $hIcon, $IMAGE_ICON, 16, 16, $LR_LOADFROMFILE) If @error Then Return SetError(2, 0, 0) EndIf EndIf Worked for me. EDIT : Forgot to say that you must add a param to the CreateButton and SetOverlayIcon functions, named $dind. Edited February 21, 2014 by perfaram Never forget to mark a question as resolved, this button has been purposely created :-P
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now