Hi AutoIt Forum,
folgende Problematik:
Ich habe das Problem, dass wenn ich in mein Zeichenprogramm gehe, der Mauszeiger Automatisch beim betreten der Malfläche, sich in ein schwarzes Kreuz ändert. Ich
benötige für meine Zwecke allerdings einen Roten Punkt als Cursor. Den Cursor in der benutzen Mal Software zuändern, habe ich bereits probiert, bin aber daran gescheitert, dass die Software nur Schwarz Weiß Cursor supportet. Friesel, sowie sehr Tatkräftig hat mir BugFix geholfen. Gesucht wird ein Script, welches wie gesagt, den Mauszeiger in einen Roten Punkt verwandelt. Folgendes Script habe ich netterweise von BugFix erhalten:
Spoiler anzeigen
#include
#include
OnAutoItExitRegister('OnAutoItExit')
HotKeySet('^+q', '_Exit') ; Strg+Shift+Q
Global Const $HC_ACTION = 0
Global $hStub_MouseProc = DllCallbackRegister("_MouseProc", "long", "int;wparam;lparam")
Global $hmod = _WinAPI_GetModuleHandle(0)
Global $hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($hStub_MouseProc), $hmod)
Global $hRef = 'Handle_des_Referenzfensters_auf_dem_der_Cursor_wirksam_sein_soll'
;~ Global $hRef = WinGetHandle('[ACTIVE]')
Global $hCursor = GUICreate('', 48, 48, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
WinSetTrans($hCursor, '', 10)
GUISetCursor(3, 1, $hCursor)
Global $fCursor = False
While True
Sleep(50)
WEnd
Func _MouseProc($nCode, $wParam, $lParam)
Local $info, $iX, $iY
$info = DllStructCreate("int X;int Y;dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo", $lParam)
$iX = DllStructGetData($info, 1)
$iY = DllStructGetData($info, 2)
Local $aRef = WinGetPos($hRef)
If ($nCode < 0 Or WinGetHandle('[ACTIVE]') <> $hRef) Or Not _
( ($iX >= $aRef[0] And $iX <= $aRef[0] +$aRef[2]) And _
($iY >= $aRef[1] And $iY <= $aRef[3]) ) Then
If $fCursor Then
$fCursor = False
WinSetOnTop($hCursor, '', 0)
GUISetState(@SW_HIDE, $hCursor)
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndIf
If $nCode = 0 Then ; == $HC_ACTION = 0
If Not $fCursor Then
$fCursor = True
GUISetState(@SW_SHOWNOACTIVATE, $hCursor)
WinSetOnTop($hCursor, '', 1)
EndIf
Switch $wParam
Case $WM_MOUSEMOVE
WinMove($hCursor, '', $iX-24, $iY-24)
Case $WM_LBUTTONDOWN
;
Case $WM_LBUTTONUP
;
Case $WM_RBUTTONDOWN
;
Case $WM_RBUTTONUP
;
Case $WM_MBUTTONDOWN
;
Case $WM_MBUTTONUP
;
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc
Func _Exit()
Exit
EndFunc
Func OnAutoItExit()
_WinAPI_UnhookWindowsHookEx($hHook)
DllCallbackFree($hStub_MouseProc)
EndFunc
Ich verfüge jedoch über garkeine Grundkentnisse und weiß nun nicht wirklich, was ich damit Anfangen soll. Die Handle habe ich meiner Meinung nach schon mit AutoIt herausgefunden und in den Code eingetragen, jedoch erhalte ich dann beim betreten des Fensters die Fehlermeldung:
Line 2575 (File "C:\Users\xxxx\Downloads\undjetzt.exe
Error: Subscript used with non-Array aviable
Wenn mir jemand Helfen könnte, wäre ich sehr dankbar, wobei das eher an die Hand nehmen wird,
da ich wirklich wenig Ahnung habe, was ich hier gerade tue.
Grüße