Code : Tout sélectionner
; http://www.autoitscript.fr/forum/viewtopic.php?f=3&t=11382
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
Opt("GuiOnEventMode", 1)
HotKeySet("{ESC}", "_Terminate")
InetGet("http://cdn.portableapps.com/WinPenguinsPortable_128.png", @tempdir & "\WinPenguinsPortable_128.png")
Global $oldsens, $sens = Random(1, 4, 1)
Global $gui, $hImage, $imgW, $imgH
$gui = GUICreate("Test", 64, 64, -1, 20, $WS_POPUP, BitOr($WS_EX_LAYERED, $WS_EX_TOPMOST))
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile(@tempdir & "\WinPenguinsPortable_128.png")
$imgW = _GDIPlus_ImageGetWidth ($hImage)
$imgH = _GDIPlus_ImageGetHeight($hImage)
;=========================partie redimensionnement
$imgW = $imgW/2
$imgH = $imgH/2
$hImage = _GDIPlus_ImageResize($hImage, $imgW, $imgH)
;=========================
SetBitMap($gui, $hImage, 255)
$label = GuiCtrlCreateLabel("", 0, 0, 64, 64)
GUICtrlSetBkColor($label, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetState($label, $GUI_ONTOP)
$contextmenu = GUICtrlCreateContextMenu($label)
$exit = GUICtrlCreateMenuItem("Exit", $contextmenu)
GUICtrlSetOnEvent(-1, "_Terminate")
GUISetState()
While 1
_Bouge()
_ChangeDeSens()
Wend
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()
;=========================================================
Func _Bouge()
Local $speed = Random(2, 12, 1)
If $sens = 1 Then ; h
$pos = WinGetPos($gui)
$stop = Random(0, @DesktopHeight-$pos[1], 1)
For $p = $pos[1] to $stop step -1
WinMove($gui, "", Default, $p)
If Mod($p, $speed) = 0 Then Sleep(1)
Next
ElseIf $sens = 2 Then ; b
$pos = WinGetPos($gui)
$stop = Random(0, @DesktopHeight-$imgH-$pos[1], 1)
For $p = $pos[1] to $stop
WinMove($gui, "", Default, $p)
If Mod($p, $speed) = 0 Then Sleep(1)
Next
ElseIf $sens = 3 Then ; g
$pos = WinGetPos($gui)
$stop = Random(0, @DesktopWidth-$pos[0], 1)
For $p = $pos[0] to $stop step -1
WinMove($gui, "", $p, Default)
If Mod($p, $speed) = 0 Then Sleep(1)
Next
ElseIf $sens = 4 Then ; d
$pos = WinGetPos($gui)
$stop = Random(0, @DesktopWidth-$imgW-$pos[0], 1)
For $p = $pos[0] to $stop
WinMove($gui, "", $p, Default)
If Mod($p, $speed) = 0 Then Sleep(1)
Next
EndIf
EndFunc
Func _ChangeDeSens()
Do
$sens = Random(1, 4, 1)
Until $sens <> $oldsens
$oldsens = $sens
EndFunc
Func _Terminate()
_GDIPlus_Shutdown()
GUIDelete ()
Exit
EndFunc
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", $imgW)
DllStructSetData($tSize, "Y", $imgH)
$tSource = DllStructCreate($tagPOINT)
$pSource = DllStructGetPtr($tSource)
$tBlend = DllStructCreate($tagBLENDFUNCTION)
$pBlend = DllStructGetPtr($tBlend)
DllStructSetData($tBlend, "Alpha" , $iOpacity )
DllStructSetData($tBlend, "Format", 1) ; $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