我希望这是可行的......我使用驻留在系统托盘中的AutoIt制作了一个程序。其中一个托盘项目运行一个功能,等待用户点击窗口获取窗口标题(它可以是任何窗口,不一定是由AutoIt制作的。这部分完美无缺。
我希望该功能在等待用户点击时将鼠标光标更改为十字。我尝试过使用GUISetCursor(3),但据我了解,这只会更改AutoIt GUI窗口的光标。
如何更改用户环境中的鼠标光标,而不仅仅是AutoIt窗口?
答案 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
这使我能够完成我所需要的。