Kannst ja per Mousedown und Mouseup die beiden Koordinaten erhalten.Quote:
Nette Farben, hast du dafür ein Programm?Quote:
Kannst ja per Mousedown und Mouseup die beiden Koordinaten erhalten.
Das Quadrat kannst du mittels GDI+ zeichnen:
_GDIPlus_GraphicsFillRect([Only registered and activated users can see links. Click Here To Register...],100,100,200,200,[Only registered and activated users can see links. Click Here To Register...])
LG Fl00d3R
#include <GDIplus.au3> #include <WinApi.au3> #include <Misc.au3> $hDLLUser32 = DllOpen('user32.dll') _GDIPlus_Startup() OnAutoItExitRegister('_OnExit') Func _OnExit() DllClose($hDLLUser32) _GDIPlus_Shutdown() EndFunc ;==>_OnExit Dim $iXStart = 0, $iYStart = 0, $iXEnd, $iYEnd While 1 If _IsPressed(01, $hDLLUser32) Then ;~ If Not $iXStart + $iYStart Then $iXStart = MouseGetPos(0) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iXStart = ' & $iXStart & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $iYStart = MouseGetPos(1) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iYStart = ' & $iYStart & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ;~ EndIf EndIf $iXEnd = MouseGetPos(0) $iYEnd = MouseGetPos(1) ;~ _DrawRect($iXStart, $iYStart, $iXEnd - $iXStart, $iYStart - $iYEnd) _DrawRect($iXStart, $iYStart, $iXEnd - $iXStart, $iYEnd - $iYStart) ;~ If $iXStart+$iYStart Then _DrawRect($iXStart, $iYStart, $iXEnd - $iXStart, $iYEnd - $iYStart) ;~ $iXStart = 0 ;~ $iYStart = 0 Sleep(10) WEnd Func _DrawRect($iX, $iY, $iWidth, $iHeight) Local $hGraphic, $hBrush $hGraphic = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow()) ;~ $hBrush = _GDIPlus_BrushCreateSolid(0x33000000) $hPen = _GDIPlus_PenCreate(0xFF0000FF) ;~ _GDIPlus_GraphicsFillRect($hGraphic, $iX, $iY, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawRect($hGraphic, $iX, $iY, $iWidth, $iHeight, $hPen) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_BrushDispose($hBrush) _GDIPlus_PenDispose($hPen) EndFunc ;==>_DrawRect
Wäre Sinnvoll, wenn du mir sagen würdest, was du genau haben möchtest.Quote:
Nette Farben, hast du dafür ein Programm?
Irgendwie funktioniert das nicht so, wie ich es mir vorgestellt habe (wie beim SnippingTool)Code:#include <GDIplus.au3> #include <WinApi.au3> #include <Misc.au3> $hDLLUser32 = DllOpen('user32.dll') _GDIPlus_Startup() OnAutoItExitRegister('_OnExit') Func _OnExit() DllClose($hDLLUser32) _GDIPlus_Shutdown() EndFunc ;==>_OnExit Dim $iXStart = 0, $iYStart = 0, $iXEnd, $iYEnd While 1 If _IsPressed(01, $hDLLUser32) Then ;~ If Not $iXStart + $iYStart Then $iXStart = MouseGetPos(0) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iXStart = ' & $iXStart & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $iYStart = MouseGetPos(1) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iYStart = ' & $iYStart & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ;~ EndIf EndIf $iXEnd = MouseGetPos(0) $iYEnd = MouseGetPos(1) ;~ _DrawRect($iXStart, $iYStart, $iXEnd - $iXStart, $iYStart - $iYEnd) _DrawRect($iXStart, $iYStart, $iXEnd - $iXStart, $iYEnd - $iYStart) ;~ If $iXStart+$iYStart Then _DrawRect($iXStart, $iYStart, $iXEnd - $iXStart, $iYEnd - $iYStart) ;~ $iXStart = 0 ;~ $iYStart = 0 Sleep(10) WEnd Func _DrawRect($iX, $iY, $iWidth, $iHeight) Local $hGraphic, $hBrush $hGraphic = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow()) ;~ $hBrush = _GDIPlus_BrushCreateSolid(0x33000000) $hPen = _GDIPlus_PenCreate(0xFF0000FF) ;~ _GDIPlus_GraphicsFillRect($hGraphic, $iX, $iY, $iWidth, $iHeight, $hBrush) _GDIPlus_GraphicsDrawRect($hGraphic, $iX, $iY, $iWidth, $iHeight, $hPen) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_BrushDispose($hBrush) _GDIPlus_PenDispose($hPen) EndFunc ;==>_DrawRect
MfG
Quote:
Wäre Sinnvoll, wenn du mir sagen würdest, was du genau haben möchtest.
LG
Ein Rechteck zeichnen, wie beim Snipping Tool. (Zu finden unter C:\Windows\System32\SnippingTool.exe)Quote:
Quote:
Push
Quote:
Ein Rechteck zeichnen, wie beim Snipping Tool. (Zu finden unter C:\Windows\System32\SnippingTool.exe)
Bei meinem Code wird mehr als ein Rechteck gezeichnet ._.
[Only registered and activated users can see links. Click Here To Register...]
bzw das alte wird nicht "gelöscht"
MfG
Ganz einfach das Ganze muss zuerst in einen Zwischenbuffer gezeichnet werden und kann dann erst rausgezeichnet werden.Quote:
schon ne lösung gefunden? ^^
_GDIPlus_Startup()
Local $hDC = _WinAPI_GetWindowDC($hGUI)
$_ShadowEngine_hGraphic = _GDIPlus_GraphicsCreateFromHDC($hDC)
$_ShadowEngine_hBitmap = _GDIPlus_BitmapCreateFromGraphics($w, $h, $_ShadowEngine_hGraphic)
$_ShadowEngine_hBackbuffer = _GDIPlus_ImageGetGraphicsContext($_ShadowEngine_hBitmap)
_GDIPlus_GraphicsClear($_ShadowEngine_hBackbuffer, $color)
_GDIPlus_GraphicsDrawImageRect($_ShadowEngine_hBackbuffer, $_ShadowEngine_Objects[$i][4], $_ShadowEngine_Objects[$i][0], $_ShadowEngine_Objects[$i][1], $_ShadowEngine_Objects[$i][2], $_ShadowEngine_Objects[$i][3])
_GDIPlus_GraphicsDrawImageRect($_ShadowEngine_hGraphic, $_ShadowEngine_hBitmap, $_ShadowEngine_X, $_ShadowEngine_Y, $_ShadowEngine_W, $_ShadowEngine_H)