使用AutoIt

时间:2016-12-14 17:54:04

标签: autoit

我希望这是可行的......我使用驻留在系统托盘中的AutoIt制作了一个程序。其中一个托盘项目运行一个功能,等待用户点击窗口获取窗口标题(它可以是任何窗口,不一定是由AutoIt制作的。这部分完美无缺。

我希望该功能在等待用户点击时将鼠标光标更改为十字。我尝试过使用GUISetCursor(3),但据我了解,这只会更改AutoIt GUI窗口的光标。

如何更改用户环境中的鼠标光标,而不仅仅是AutoIt窗口?

2 个答案:

答案 0 :(得分:0)

你可以这样做:

#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

答案 1 :(得分:0)

感谢理查德的评论,以及AutoIt论坛上的回复,将我与AutoIt的_WinAPI_SetSystemCursor功能联系起来,我能够让这个有用。

我从%SystemRoot%\ Cursors复制了我想要的十字光标(具体来说,我复制了cross_i.cur)以放入我脚本的源目录。

然后,在执行程序功能的函数中,我添加了以下行:

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

这使我能够完成我所需要的。