2016-12-14 3 views
0

Я надеюсь, что это возможно ... Я сделал программу с использованием AutoIt, которая находится в системном трее. Один из элементов лотка запускает функцию, которая ждет, когда пользователь щелкнет по окну, чтобы получить заголовок окна (это может быть любое окно, не обязательно сделанное из AutoIt. Эта часть работает безупречно.Измените курсор мыши на окружение с помощью AutoIt

Я бы хотел функция изменить курсор мыши на крест во время ожидания щелчка пользователя.Я попытался использовать GUISetCursor (3), но из моего понимания это только изменяет курсор для окна 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

Этот комментарий к комментарию Ричарда и ответ на форумах 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