Hallo
Ich hab dir hier mal etwas geschrieben: (ich liebe den PNG Support in AutoIt ;))
Spoiler anzeigen
#Include <GDIPlus.au3> ; this is where the magic happens, people
#include <GuiComboBox.au3>
Global Const $AC_SRC_ALPHA = 1
Global Const $ULW_ALPHA = 2
Global $CursorGUI
$cur = _CreateCursor(250, 500)
[/autoit] [autoit][/autoit] [autoit]For $i = 500 To 700 Step 4
_MoveCursor($cur, $i/2, $i)
Sleep(10)
Next
Sleep(1000)
_DeleteCursor($cur)
Func _CreateCursor($iLeft = -1, $iTop = -1)
Local $width, $pngSrc, $height, $hImage, $aRet[2], $CursorGUI
; Load PNG file as GDI bitmap
_GDIPlus_Startup()
$pngSrc = @ScriptDir & "\cur.png"
$hImage = _GDIPlus_ImageLoadFromFile($pngSrc)
; Extract image width and height from PNG
$width = _GDIPlus_ImageGetWidth($hImage)
$height = _GDIPlus_ImageGetHeight($hImage)
; Create layered window
$CursorGUI = GUICreate("Cur", $width, $height, $iLeft, $iTop, $WS_POPUP, $WS_EX_LAYERED+$WS_EX_TOOLWINDOW)
SetBitmap($CursorGUI, $hImage, 0)
; Register notification messages
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
GUISetState()
WinSetOnTop($CursorGUI, "", 1)
;fade in png background
For $i = 0 To 255 Step 1
SetBitmap($CursorGUI, $hImage, $i)
Next
$aRet[0] = $CursorGUI
$aRet[1] = $hImage
Return $aRet
EndFunc ;==>_CreateCursor
Func _MoveCursor($ahCur, $iLeft, $iTop)
WinMove($ahCur[0], "", $iLeft, $iTop)
EndFunc ;==>_MoveCursor
Func _DeleteCursor($ahCursor)
;fade out png background
For $i = 255 To 0 Step - 10
SetBitmap($ahCursor[0], $ahCursor[1], $i)
Next
; Release resources
_GDIPlus_ImageDispose($ahCursor[1])
EndFunc ;==>_DeleteCursor
Func OnAutoItExit()
_GDIPlus_Shutdown()
EndFunc ;==>OnAutoItExit
;===============================================================================================================================
; Handle the WM_NCHITTEST for the layered window so it can be dragged by clicking anywhere on the image.
;===============================================================================================================================
Func WM_NCHITTEST($hWnd, $iMsg, $iwParam, $ilParam)
If ($hWnd = $CursorGUI) And ($iMsg = $WM_NCHITTEST) Then Return $HTCAPTION
EndFunc ;==>WM_NCHITTEST
;===============================================================================================================================
; SetBitMap
;===============================================================================================================================
Func SetBitmap($hGUI, $hImage, $iOpacity)
Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
$hScrDC = _WinAPI_GetDC(0)
$hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
$tSize = DllStructCreate($tagSIZE)
$pSize = DllStructGetPtr($tSize)
DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha", $iOpacity)
DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
_WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
_WinAPI_ReleaseDC(0, $hScrDC)
_WinAPI_SelectObject($hMemDC, $hOld)
_WinAPI_DeleteObject($hBitmap)
_WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetBitmap
Ich hoffe das hilft dir weiter
Mfg Spider
Edit: cur.png angehangen (siehe unten)
Edit2: Hab mal eben den lästigen eintrag in der Taskleiste entfernt ($WS_EX_TOOLWINDOW)