Search the Community
Showing results for tags 'guigetcursorinfo'.
-
I was messing with a double window gui and found GUIGetCursorInfo() not to work as expected winhandle [optional] The handle of the window to use. If omitted the "current" window will be used. so what does "current" window mean its surely not the active window? In this case its the last created window I think the documentation should at least be: winhandle [optional] Windows handle as returned by GUICreate() (default is the previously used window). https://www.autoitscript.com/autoit3/docs/functions/GUIGetCursorInfo.htm #include <GUIConstantsEx.au3> Opt("GUIOnEventMode", 1) Global $g_idX1 = 0, $g_idY1 = 0, $g_idX2 = 0, $g_idY2 = 0 Global $g_idB1, $g_idB2 Global $hWnd1, $hWnd2 Example() Func Example() $hWnd1 = GUICreate("#1 Click to Get Pos", 400, 400, 100, 100) $g_idX1 = GUICtrlCreateLabel("0", 10, 10, 50) $g_idY1 = GUICtrlCreateLabel("0", 40, 10, 50) $g_idB1 = GUICtrlCreateButton("Window1", 10, 30) GUISetOnEvent($GUI_EVENT_CLOSE, _Exit, $hWnd1) GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, GetPos, $hWnd1) GUISetState(@SW_SHOW) $hWnd2 = GUICreate("#2 Click to Get Pos", 400, 400, 200, 200) $g_idX2 = GUICtrlCreateLabel("0", 10, 10, 50) $g_idY2 = GUICtrlCreateLabel("0", 40, 10, 50) $g_idB2 = GUICtrlCreateButton("Window2", 10, 30) GUISetOnEvent($GUI_EVENT_CLOSE, _Exit, $hWnd2) GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, GetPos, $hWnd2) GUISetState(@SW_SHOW) ; Loop Forever While 1 Sleep(100000) WEnd EndFunc ;==>Example Func GetPos() Local $hWndActive = WinActive("") Local $sWindow, $a $a = GUIGetCursorInfo() ;$a = GUIGetCursorInfo(WinActive(""));Works If @error Or Not IsArray($a) Then Local $a[5] = [-1, -1, -1, -1, -1] If $hWndActive = $hWnd1 Then $sWindow = "#1" GUICtrlSetData($g_idX1, $a[0]) GUICtrlSetData($g_idY1, $a[1]) ElseIf $hWndActive = $hWnd2 Then $sWindow = "#2" GUICtrlSetData($g_idX2, $a[0]) GUICtrlSetData($g_idY2, $a[1]) Else $sWindow = "N/A" EndIf ConsoleWrite("Window " & $sWindow & " is active" & @CRLF) If IsArray($a) Then ConsoleWrite("Control Id = " & $a[4] & @CRLF) EndFunc ;==>GetPos Func _Exit() GUIDelete() Exit EndFunc ;==>_Exit It goes on further to state Even thats not true, if so this should fail for window #2 instead you'd need to call GUISwitch ($hWnd1) Func GetPos() Local $hWndActive = WinActive("") Local $sWindow, $a ;$a = GUIGetCursorInfo() $a = GUIGetCursorInfo($hWnd1) ;$a = GUIGetCursorInfo(WinActive(""));Works If @error Or Not IsArray($a) Then Local $a[5] = [-1, -1, -1, -1, -1] If $hWndActive = $hWnd1 Then $sWindow = "#1" GUICtrlSetData($g_idX1, $a[0]) GUICtrlSetData($g_idY1, $a[1]) ElseIf $hWndActive = $hWnd2 Then $a = GUIGetCursorInfo() $sWindow = "#2" GUICtrlSetData($g_idX2, $a[0]) GUICtrlSetData($g_idY2, $a[1]) Else $sWindow = "N/A" EndIf ConsoleWrite("Window " & $sWindow & " is active" & @CRLF) If IsArray($a) Then ConsoleWrite("Control Id = " & $a[4] & @CRLF) EndFunc ;==>GetPos