- Offizieller Beitrag
EDIT:
Hinweise von Bitnugger eingearbeitet:
Ein Nebenprodukt aus einem Projekt von mir, vielleicht auch nützlich für euch.
Mit der Funktion _MouseTrapCircle() wird die Maus in einem definierten Kreis gefangen.
Ist die Maus bei Aktivieren der Funktion außerhalb des Kreises, wird sie bei der ersten Mausbewegung in den Kreis bewegt und kann diesen nicht wieder verlassen, bis die Funktion deaktiviert wird.
Bei Aufruf der Funktion wird die Maus in den Kreis verschoben und kann diesen bis zur Deaktivierung nicht mehr verlassen.
Der Kreis wird definiert über den Mittelpunkt (Standard) oder die linke obere Ecke des umlaufenden Rechtecks sowie dem Durchmesser.
Weiteres Bsp. (Kreis nicht auf Gui) hinzugefügt.
AutoIt: MouseTrapCircle_Bsp.au3
;-- TIME_STAMP 2020-04-12 08:06:53
#include 'MouseTrapCircle.au3'
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
_Example_1()
Global $g_hPen, $g_hGraphic, $g_hDC
_Example_2() ; "Strg+Shift+T" - Trap On/Off, "Strg+Shift+0" - Beenden
Func _Example_1()
Local $hGui, $hGraphic, $dummy, $bTrap = False, $idStatus
Local $iD = 140 ; Durchmesser
$hGui = GUICreate('MouseTrapCircle [Trap: OFF]', 300, 300, 400, 100)
GUICtrlCreateLabel('"Strg+Shift+T"' & @LF & '(De)Aktiviert das Trapping.', 20, 20, 260, 50)
GUICtrlSetFont(-1, 12, 400, 0, 'Consolas')
$idStatus = GUICtrlCreateLabel('Trap: OFF', 20, 260, 100)
GUICtrlSetFont(-1, 12, 600, 0, 'Consolas')
GUICtrlSetColor(-1, 0xFF0000)
$dummy = GUICtrlCreateDummy()
Local $aAcc[1][2] = [['^+T',$dummy]]
GUISetAccelerators($aAcc, $hGui)
GUISetState(@SW_SHOW, $hGui)
_GDIPlus_Startup()
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
;~ _GDIPlus_GraphicsDrawEllipse($hGraphic, 80, 100, $iD, $iD) ; draw by edge
_GDIPlus_GraphicsDrawCircleByCentre($hGraphic, 150, 170, $iD) ; draw by center
While True
Switch GUIGetMsg()
Case -3
ExitLoop
Case $dummy
$bTrap = Not $bTrap
If $bTrap Then
;~ _MouseTrapCircle($hGui, 80, 100, 140, True) ; by: left-top edge
_MouseTrapCircle($hGui, 150, 170, 140) ; or by: center
WinSetTitle($hGui, '', 'MouseTrapCircle [Trap: ON]')
GUICtrlSetData($idStatus, 'Trap: ON')
GUICtrlSetColor($idStatus, 0x00BE08)
Else
_MouseTrapCircle()
WinSetTitle($hGui, '', 'MouseTrapCircle [Trap: OFF]')
GUICtrlSetData($idStatus, 'Trap: OFF')
GUICtrlSetColor($idStatus, 0xFF0000)
EndIf
EndSwitch
WEnd
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_Shutdown()
GUIDelete($hGui)
EndFunc
Func _GDIPlus_GraphicsDrawCircleByCentre($_hGraphic, $_iX, $_iY, $_iDiameter, $_hPen=0)
$_iX -= $_iDiameter/2
$_iY -= $_iDiameter/2
_GDIPlus_GraphicsDrawEllipse($_hGraphic, $_iX, $_iY, $_iDiameter, $_iDiameter, $_hPen)
EndFunc
;---------------------------------------------------------------------------------------------------
Func _Example_2()
AdlibRegister('_DrawOnDesktop')
HotKeySet('^+T', '_SwitchTrap')
HotKeySet('^+0', '_Exit')
_GDIPlus_Startup()
While True
Sleep(10)
WEnd
EndFunc
Func _SwitchTrap()
Local Static $bTrap = False
$bTrap = Not $bTrap
If $bTrap Then
_MouseTrapCircle(-1, 500, 500, 250) ; by: center
MsgBox(64, '_MouseTrapCircle', 'MouseTrapCircle [ ON ]', 2)
Else
_MouseTrapCircle()
MsgBox(64, '_MouseTrapCircle', 'MouseTrapCircle [ OFF ]', 2)
EndIf
EndFunc
Func _DrawOnDesktop()
Local Static $bMinimized = False
If Not $bMinimized Then
$bMinimized = True
Send('#m')
EndIf
Local $g_hDC = _WinAPI_GetWindowDC(0) ; DC of entire screen (desktop)
Local $g_hGraphic = _GDIPlus_GraphicsCreateFromHDC($g_hDC)
Local $g_hPen = _GDIPlus_PenCreate(0xFF00BE08, 4)
_GDIPlus_GraphicsDrawCircleByCentre($g_hGraphic, 500, 500, 250, $g_hPen)
_GDIPlus_PenDispose($g_hPen)
_GDIPlus_GraphicsDispose($g_hGraphic)
_WinAPI_ReleaseDC(0, $g_hDC)
EndFunc
Func _Exit()
AdlibUnRegister('_DrawOnDesktop')
_GDIPlus_Shutdown()
Send('#+m')
Exit
EndFunc
Alles anzeigen