Espero que esto sea factible ... Hice un programa usando AutoIt que reside en la bandeja del sistema. Uno de los elementos de la bandeja ejecuta una función que espera a que el usuario haga clic en una ventana para obtener el título de la ventana (puede ser cualquier ventana, no necesariamente una hecha de AutoIt. Esta parte funciona perfectamente.

Me gustaría que la función cambie el cursor del mouse a la cruz mientras espero el clic del usuario. Intenté usar GUISetCursor (3), pero según tengo entendido, esto solo cambia el cursor para una ventana de AutoIt GUI.

¿Cómo podría cambiar el cursor del mouse para el entorno del usuario, no solo para una ventana de AutoIt?

0
jparnell8839 14 dic. 2016 a las 20:54

2 respuestas

La mejor respuesta

Eso se refiere al comentario de Richard y a una respuesta en los foros de AutoIt que me vinculó a _WinAPI_SetSystem de AutoIt función, pude hacer que esto funcionara.

Copié el cursor en cruz que quería de% SystemRoot% \ Cursors (específicamente, copié cross_i.cur) para ponerlo en el directorio de origen de mi script.

Luego, en la función que ejecuta el bruto del programa, agregué las siguientes líneas:

Func FuncName()
       ;backs up the user's arrow cursor
   Local $hPrev = _WinAPI_CopyCursor(_WinAPI_LoadCursor(0, 32512))

       ;backs up the user's ibeam cursor
   Local $iPrev = _WinAPI_CopyCursor(_WinAPI_LoadCursor(0, 32513)) 

       ;changes the user's arrow cursor
   _WinAPI_SetSystemCursor(_WinAPI_LoadCursorFromFile(@ScriptDir & "\cross.cur"),32512) 
       ;changes the user's ibeam cursor
   _WinAPI_SetSystemCursor(_WinAPI_LoadCursorFromFile(@ScriptDir & "\cross.cur"),32513) 

   ; Do the code you want to execute

       ;restores the user's default cursor
   _WinAPI_SetSystemCursor($hPrev,32512) 
       ;restores the user's ibeam cursor
   _WinAPI_SetSystemCursor($iPrev,32513) 
EndFunc

Esto me permitió lograr lo que necesitaba.

0
jparnell8839 14 dic. 2016 a las 20:21

Puedes hacerlo así:

#include <Misc.au3>
#include <WindowsConstants.au3>

GetTitleByClick()

Func GetTitleByClick()
    Local $hCursor = GUICreate('', 48, 48, -1, -1, $WS_POPUP, $WS_EX_TOPMOST)
    WinSetTrans($hCursor, '', 10)
    GUISetCursor(3, 1, $hCursor)
    GUISetState(@SW_SHOW, $hCursor)

    ; get title bar position
    Local $pos
    Do
        $pos = MouseGetPos()
        WinMove($hCursor, '', $pos[0]-24, $pos[1]-24)
        Sleep(10)
    Until _IsPressed('01')
    GUIDelete($hCursor)

    ; block mouse
    _MouseTrap($pos[0], $pos[1], $pos[0]+1, $pos[0]+1)

    ; click position - activates the window
    MouseClick('left', $pos[0], $pos[1])

    ; unblock mouse
    _MouseTrap()

    ; get the title of the active window
    Local $sTitle = WinGetTitle('[ACTIVE]')

    Return MsgBox(0, 'TITLE', $sTitle)
EndFunc
0
user5992808user5992808 14 dic. 2016 a las 20:20