2016-12-14 60 views
0

我希望這是可行的...我使用AutoIt駐留在系統托盤中的程序。其中一個托盤項目運行一個功能,等待用戶點擊一個窗口來獲得窗口標題(它可以是任何窗口,不一定是由AutoIt製成的),這部分工作完美無缺。在嘗試使用GUISetCursor(3)時,我嘗試使用GUISetCursor(3),但是從我的理解中,這隻改變了AutoIt GUI窗口的光標。爲用戶環境更改鼠標光標,而不僅僅是用於AutoIt窗口?用AutoIt在環境中更改鼠標光標

+0

您可以修改此文章https://blogs.technet.microsoft.com/heyscriptingguy/2013/01/17/use-powershell-to-change-the-mouse-pointer-scheme/到AutoIt,但我認爲這將是實踐,因爲當程序退出時,更改不會自動恢復 – Richard

+0

感謝您在正確方向上的一個點,以及AutoIt論壇中的用戶。 – jparnell8839

回答

0

對Richard的評論,以及在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 

這讓我完成我需要的東西。

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 
+0

我很欣賞這個輸入,但是我不認爲我最初是清楚自己想要什麼......我有算法來收集用戶在窗口上的點擊;我沒有改變光標。我通過幾個來源找到了我的答案。我已經修改了我的問題,我希望更清楚 – jparnell8839