Folgendes Script zeigt, wie man quasi "direkt" auf den Bildschirm malen kann.
Spoiler anzeigen
#include <GDIPlus.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
HotKeySet("{Esc}", "_Exit")
[/autoit] [autoit][/autoit] [autoit]Global $aPos[11][2], $iXOld, $iYOld
[/autoit] [autoit][/autoit] [autoit]$hGui = GUICreate("Mausverfolger", @DesktopWidth, @DesktopHeight, -1, -1, $WS_POPUP, BitOR($WS_EX_TRANSPARENT, $WS_EX_LAYERED, $WS_EX_TOPMOST))
GUISetBkColor(0xABCDEF)
_WinAPI_SetLayeredWindowAttributes($hGui, 0xABCDEF, 255)
GUISetState(@SW_SHOW, $hGui)
_GDIPlus_Startup()
$hBrush = _GDIPlus_BrushCreateSolid(0xFFFF9900)
$hBrushDel = _GDIPlus_BrushCreateSolid(0xFFABCDEF)
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
While 1
For $i = 0 To 9
$aPos[$i][0] = $aPos[$i + 1][0]
$aPos[$i][1] = $aPos[$i + 1][1]
Next
$iXOld = $aPos[10][0]
$iYOld = $aPos[10][1]
$aPos[10][0] = MouseGetPos(0)
$aPos[10][1] = MouseGetPos(1)
For $i = 0 To 10
If $i = 10 And $aPos[10][0] = $iXOld And $aPos[10][1] = $iYOld Then ContinueLoop
_GDIPlus_GraphicsFillRect($hGraphics, $aPos[$i][0], $aPos[$i][1], 2.5 * $i, 2.5 * $i, $hBrush)
Next
Sleep(10)
For $i = 0 To 10
If $i < 10 And $aPos[$i][0] = $aPos[10][0] And $aPos[$i][1] = $aPos[10][1] Then ContinueLoop
If $i = 10 And $aPos[10][0] = $iXOld And $aPos[10][1] = $iYOld Then ContinueLoop
_GDIPlus_GraphicsFillRect($hGraphics, $aPos[$i][0], $aPos[$i][1], 2.5 * $i, 2.5 * $i, $hBrushDel)
Next
WEnd
Func _WinAPI_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $dwFlages = 0x03, $isColorRef = False)
If $dwFlages = Default Or $dwFlages = "" Or $dwFlages < 0 Then $dwFlages = 0x03
If Not $isColorRef Then
$i_transcolor = Hex(String($i_transcolor), 6)
$i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
EndIf
Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $dwFlages)
Select
Case @error
Return SetError(@error, 0, 0)
Case $Ret[0] = 0
Return SetError(4, _WinAPI_GetLastError(), 0)
Case Else
Return 1
EndSelect
EndFunc ;==>_WinAPI_SetLayeredWindowAttributes
Func _Exit()
Exit
EndFunc ;==>_Exit
Viel Spaß
E