1 (изменено: metlick, 2011-09-30 10:40:30)

Тема: AHK: Как организовать слежение за курсором?

Нужно что бы производилось слежение за областью курсора и как только внешний вид его меняется жмется допустим лкм.Сами подробности смены внешнего вида не важны, главное как и можно ли вообще организовать постояннуое слежение именно за курсором?

2

Re: AHK: Как организовать слежение за курсором?

Есть на форуме такая секретная кнопка [Поиск].
Если ввести в строке поиска слово "курсор", можно найти тему Общение  » AutoHotkey  » АНК: Как узнать текущий курсор?.

3 (изменено: metlick, 2011-10-01 16:42:55)

Re: AHK: Как организовать слежение за курсором?

Подскажите, а где мне узнать этот самый параметр курсора используемого в данный момент и как быть с этим?

Курсоры в форме руки (указывающей и хватающей) классифицируются как неизвестные.

И еще у меня курсор должен подгружатся как спрайт (.spr) но откуда я вычислить не могу(умышленно спрятан).Может всетаки можно как-то следить за курсором с помощью PixelSearch?

4

Re: AHK: Как организовать слежение за курсором?

Открываете документацию по AutoHotkey на разделе Переменные и выражения (Variables and Expressions) и читаете про встроенную переменную a_cursor.

5

Re: AHK: Как организовать слежение за курсором?

«Этот самый параметр курсора» — какой?

6 (изменено: metlick, 2011-10-01 18:58:43)

Re: AHK: Как организовать слежение за курсором?

Открываете документацию по AutoHotkey на разделе Переменные и выражения (Variables and Expressions) и читаете про встроенную переменную a_cursor.

Кроме этого:

Тип курсора мыши, отображаемого в данный момент на экране. Значением может быть одно из следующих слов: AppStarting, Arrow, Cross, Help, IBeam, Icon, No, Size, SizeAll, SizeNESW, SizeNS, SizeNWSE, SizeWE, UpArrow, Wait, Unknown. Акронимы, которые используются с курсорами, отображающимися во время изменения размеров объектов, указывают на стороны света, напр. NESW = NorthEast+SouthWest (северо-восток + юго-запад). Курсоры в форме руки (указывающей и хватающей) классифицируются как неизвестные.
При неоднократном считывании содержимого данной переменной на высокой скорости (т.е. каждые 500 мсек. или быстрее), возможность делать двойные щелчки мышью может быть нарушена. На данный момент не существует способов обойти эту проблему.

ничего извените не нашел, потому и спрашиваю как узнать какое значение принемает курсор в данный момент?

«Этот самый параметр курсора» — какой?

обьясняю меня послали сюда Общение  » AutoHotkey  » АНК: Как узнать текущий курсор?
там два параметра OCR_NORMAL := 32512 и IDC_ARROW = 32512 возник вопрос откуда они берутся?

7 (изменено: metlick, 2011-10-01 19:06:50)

Re: AHK: Как организовать слежение за курсором?

Может както так?

Loop
   {    
      MouseGetPos, MouseX, MouseY
      PixelGetColor, color, MouseX+3, MouseY+3
      if color = 0xFFFFFF
         MouseClick, left, MouseX, MouseY          
      Sleep, 100      
   }

но чтото не выходит, возможно гдето ошибка...

8

Re: AHK: Как организовать слежение за курсором?

SystemCursors = 32512IDC_ARROW,32513IDC_IBEAM,32514IDC_WAIT
               ,32515IDC_CROSS,32516IDC_UPARROW,32640IDC_SIZE
               ,32641IDC_ICON,32642IDC_SIZENWSE,32643IDC_SIZENESW
               ,32644IDC_SIZEWE,32645IDC_SIZENS,32646IDC_SIZEALL
               ,32648IDC_NO,32649IDC_HAND,32650IDC_APPSTARTING
               ,32651IDC_HELP
SetTimer, ChaseCursor, 100
Return
ChaseCursor:
   Loop, Parse, SystemCursors, `,
   {
      If A_Cursor = Unknown
      {
         CursorName := "IDC_NO or IDC_HAND"
         CursorID := "32648 or 32649"
         Break
      }
      Else If (A_Cursor = SubStr(A_Loopfield, 10, 20))
      {
         CursorName := SubStr(A_Loopfield, 6, 20)
         CursorID := SubStr(A_Loopfield, 1, 5)
         Break
      }
   }
   ToolTip, % "cursor: "A_Cursor
          . "`ncursorname: "CursorName
          . "`ncursorid: "CursorID
   Return

9

Re: AHK: Как организовать слежение за курсором?

Спасибо огромное оч интересный скрипт,особенно фунуция ToolTip, но как я и предпологал определение параметров курсора мне ничего не дало:(. курсор в виде стрелки определяет как Cursor : Unknown и т.д, когда курсор становится рукой параметры не меняются.Сделал скрипт по нажатию лкм, не при 32648IDC_NO, не при 32649IDC_HAND ничнго не происходит,хотя опять таки извеняюсь, возможно проблема только в моей нехватке знаний по данному вопросу .

10

Re: AHK: Как организовать слежение за курсором?

metlick пишет:

...как только внешний вид его меняется жмется допустим лкм.

Меняется с какого на какой?, жмётся как?

11 (изменено: metlick, 2011-10-02 14:06:04)

Re: AHK: Как организовать слежение за курсором?

c вот такого http://img843.imageshack.us/img843/8297/cursors0008.png на такой http://img37.imageshack.us/img37/4350/cursors0001.png

жмётся как?

Не совсем понял вопрос, можно один раз, можно пока курсор опять не примет изначальный вид
так наверно MouseClick ,left
Дополню - оба изображения курсора раньше находились в файле с расширением .spr, но счас к самому файлу доступа нету(точнее он остался но изменение перестало влиять на его отображение), либо он както постоянно подгружается с сервера либо его както спрятали

12

Re: AHK: Как организовать слежение за курсором?

Этот курсор только в какой-то определённой программе?

13 (изменено: metlick, 2011-10-02 14:07:51)

Re: AHK: Как организовать слежение за курсором?

Да в игре.

14

Re: AHK: Как организовать слежение за курсором?

metlick, обратите внимание, как я исправил Ваш пост #11, правильно оформив изображения. Впредь ожидаю от Вас такого же корректного оформления изображений.

15 (изменено: Александр_, 2011-10-02 14:50:48)

Re: AHK: Как организовать слежение за курсором?

metlick пишет:

Да в игре.

Ну вообще, получить информацию о текущем курсоре можно через функцию GetCursorInfo, но игры используют не стандартные системные функции, а специальные библиотеки(DirectX, OpenGL), которые работают с видео напрямую и могут не сообщить системе о смене курсора.

#Persistent
GetCursorInfo(CursorInfo)
; Функция извлекает информацию о текущем курсоре
; NumGet(CursorInfo,0,"int")- размер структуры в байтах
; NumGet(CursorInfo,4,"int")- показан курсор или скрыт
; NumGet(CursorInfo,8,"int")- дескриптор курсора
; NumGet(CursorInfo,12,"int")- координата x
; NumGet(CursorInfo,16,"int")- координата y
{
   return DllCall("GetCursorInfo", "int", CursorInfo)
}

VarSetCapacity(CursorInfo, 20)
NumPut(20,CursorInfo)
GetCursorInfo(&CursorInfo)
cur:=NumGet(CursorInfo,8)

SetTimer Func, 200
return

Func:
   NumPut(20,CursorInfo)
   GetCursorInfo(&CursorInfo)
   new:=NumGet(CursorInfo,8)
   if (new<>cur)
   {
      cur:=new
      ; курсор изменился
   }
   ToolTip %cur%
return

если выше приведённый код не поможет, то посмотрите верно ли определяются координаты курсора и виден ли курсор с точки зрения ОС.

16 (изменено: metlick, 2011-10-03 12:06:59)

Re: AHK: Как организовать слежение за курсором?

Спасибо большое много полезного для себя подчеркнул, но решил свою проблему другим способом, всеже с помощью PixelSearch.

17 (изменено: mih, 2011-10-03 20:14:42)

Re: AHK: Как организовать слежение за курсором?

Скрипт  Александр_а различает курсоры, неизвестные для A_Cursor (напр., перст указующий и сжатый). Но с типом курсора "NO" дурит, число (гораздо больше, чем 65nnn) случайное.

18

Re: AHK: Как организовать слежение за курсором?

mih пишет:

Скрипт  Александр_а различает курсоры, неизвестные для A_Cursor (напр., перст указующий и сжатый). Но с типом курсора "NO" дурит, число (гораздо больше, чем 65nnn) случайное.

Так а что в этом случае возвращает GetCursorInfo и что лежит в a_lasterror? Я, к сожалению, не нашёл у себя приложений с нестандартными курсорами .

19 (изменено: mih, 2011-10-04 13:03:47)

Re: AHK: Как организовать слежение за курсором?

Берётся Проводник. Чуть сдвигается левой кнопкой мыши любой файл. Имеем курсор "No" и совершенно случайное число от GetCursorInfo (a_lasterror вроде содержит нуль). Можно и правой сдвигать — другой курсор, картина та же. Возможно, это результат действия картинки файла, которая тянется за курсором?
Тот же "Nо" в Опере стабильно имеет код  66581, а в фубаре, например —  3213319 — там они вроде бы постоянные в рамках приложения. Причём в Опере — "No" я могу получить сдвигом любой картинки (например, вправо на прокрутку, или вверх), и картинка тоже тянется за курсором.

20

Re: AHK: Как организовать слежение за курсором?

mih пишет:

Берётся Проводник. Чуть сдвигается левой кнопкой мыши любой файл. Имеем курсор "No" и совершенно случайное число от GetCursorInfo (a_lasterror вроде содержит нуль). Можно и правой сдвигать — другой курсор, картина та же. Возможно, это результат действия картинки файла, которая тянется за курсором?

У меня тут перетаскивание иконок в проводнике никак не влияет на курсор(Win7 SP1, на других не проверял).

21 (изменено: Tsubasa, 2016-04-16 21:53:27)

Re: AHK: Как организовать слежение за курсором?

Александр_ пять лет назад написал скрипт для слежения за курсором. При запуске мне выдаёт:

Line Text: GetCursorInfo(CursorInfo)
Error: Parameters of hotkey functions must be optional.

The program will exit.

Не подскажете, что не так?


UPD: Я заменил вызов функции на её саму

DllCall("GetCursorInfo", "int", CursorInfo)

Ошибка пропала, но номер курсора отображается, как "0" для всех курсоров.

UPD2: В итоге, я не понимаю, как получить номер курсора.


F11::
  #Persistent
  VarSetCapacity(ci,20), NumPut(20,ci) 
  DllCall("GetCursorInfo", "Uint", &ci) 
  hCursor := NumGet(ci,8)	
  ToolTip %hCursor%
return

Выдаёт вечный ноль.

22

Re: AHK: Как организовать слежение за курсором?

https://github.com/jNizM/AHK_DllCall_Wi … 0Functions

23 (изменено: Tsubasa, 2016-04-16 23:38:50)

Re: AHK: Как организовать слежение за курсором?

Спасибо. Номер курсора берётся. Но, почему-то, только один раз. При повторном обращении к функции, возвращается пустота.

UPD: Изменил переменную CURSORINFO со статической, на глобальную.

global CURSORINFO

Вроде пошло веселее.