Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Определить цвет курсора мыши (http://forum.oszone.net/showthread.php?t=145674)

Frost_Imp 20-07-2009 18:04 1172920

Определить цвет курсора мыши
 
Собственно, сабж. Определить цвет пикселя ПОД курсором я могу, а вот можно ли отследить изменение цвета самого курсора? Однозначно, должно быть какое-то событие, которое отправляет (кому-то или чему-то) инфу о том, что ВОТ ИМЕННО СЕЙЧАС надо не синий (опционально) курсор отображать, а зеленый (так же опционально)?

Belfigor 21-07-2009 15:56 1173691

MouseGetCursor ( ) почитай в хелпе, возвращает ID курсора, мб тебе будет полезна, ничего большего сказать не могу ибо сам с этой командой не работал никогда :)

Creat0R 21-07-2009 16:44 1173734

Цитата:

Цитата Belfigor
сам с этой командой не работал никогда »

Тогда как вы можете советовать использовать её? :unsure:

Цитата:

Цитата Frost_Imp
можно ли отследить изменение цвета самого курсора? »

Метод мне лично не попадался, но полагаю это будет возможно только если извлечь изображение курсора и проанализировать с помощью _GDIPlus*. Но это только в теории.

P.S
Для чего это нужно, может есть другое, более удобное решение задачи?

Frost_Imp 23-07-2009 12:54 1175487

есть D3D окно (игровое), в нем курсор - стандартный (то есть ID не меняется в теории, на практике еще не проверял). Когда при перемещении курсор "наталкивается" на определенный предмет - он тупо меняет цвет. Мне бы в теории хотелось при этом эмулировать нажатие на ЛКМ, вот только отследить момент, когда курсор находится НАД искомым объектом не могу

Creat0R 23-07-2009 15:44 1175656

Цитата:

Цитата Frost_Imp
Когда при перемещении курсор "наталкивается" на определенный предмет - он тупо меняет цвет. »

А этот предмет не имеет цветового отличия? Или можеть быть вовсе у него есть CtrlID?

А как на счёт варианта проверки местоположения курсора? Задать координаты и проверять их в цикле.

Frost_Imp 23-07-2009 16:16 1175686

Цитата:

Цитата Creat0R
А этот предмет не имеет цветового отличия? Или можеть быть вовсе у него есть CtrlID?»

Вероятно, я повел тебя по ложному пути, назвав искомый предмет "предметом" =) Предмет перемещается, его координаты непостоянные. Обычный игровой персонаж. Глобальная задача - в автоматическом режиме найти его и осуществить клик.
Цитата:

Цитата Creat0R
А как на счёт варианта проверки местоположения курсора? Задать координаты и проверять их в цикле. »

Ну вот об этом выше и написал, координаты, в котором курсор может поменять цвет, абсолютно рандомные

Creat0R 23-07-2009 16:38 1175700

Цитата:

Цитата Frost_Imp
Глобальная задача - в автоматическом режиме найти его и осуществить клик. »

У него есть отличительные цвета? Можно через PixelSearch...

Frost_Imp 23-07-2009 17:12 1175737

Цитата:

Цитата Creat0R
У него есть отличительные цвета? Можно через PixelSearch... »

Слишком сложно. Во-первых графики много, цветов много, искать на всем икране определенный пиксель - муторно. Вероятно, каким-то образом бы помог PixelCheckSum, но... Какова тогда концепция поиска? Как передать координаты найденного пикселя курсору мыши для перемещения?

SyDr 23-07-2009 17:21 1175748

Дай скрин, как выглядят твои курсоры.

Frost_Imp 23-07-2009 17:38 1175766

Вложений: 2
Цитата:

Цитата Sylver Dragon
Дай скрин, как выглядят твои курсоры. »

Вот

Frost_Imp 23-07-2009 18:00 1175793

MouseGetCursor ( ) возвращает 0, то есть
Возвращаемое значение
Один и следующих идентификаторов ID Number:
0 = UNKNOWN

Frost_Imp 24-07-2009 10:59 1176338

..up..

Creat0R 24-07-2009 16:32 1176656

Frost_Imp,
Примерно так:

Код:

While 1
    $aMousePos = MouseGetPos()
    $nColor = "0x" & Hex(PixelGetColor($aMousePos[0], $aMousePos[1]), 6)

    If $nColor = 0x343924 Then
        MsgBox(64, 'Title', "Cursor changed")
        ;do something
    EndIf

    Sleep(10)
WEnd

Тут в цикле проверяем цвет пикселя под курсором, если совпадает, то выводим сообщение. Таким же способом можно указать целую палитру цветов, чтобы определить что курсор над нужным элементом (предметом).

Frost_Imp 24-07-2009 16:36 1176660

Ну тут получается скорее поиск цвета, нежели изменение самого цвета курсора. Тогда проще PixelSearch делать, там то участие человека не нужно, в твоем коде мышкой надо самостоятельно водить. Или MouseMove делать. Как решение глобальной задачи - реализуемо, уже проверил и протестил. Но вот конкретный вопрос (изменение цвета курсора) не решает

SyDr 24-07-2009 21:23 1176940

1) Обрати внимание, что положение курсора в игре может отличаться от реального положения курсора на экране. То есть к примеру реальное положение курсора на экране - (100;200), а с виду "кажется", что он находится в координатах (200;250).
2) Курсор могут "перекрывать" различные игровые элементы. Ну... То есть немного менять его цвет. Или, к примеру, отображение какой-либо подсказки на экране может его вообще перекрыть.
3) PixelGetColor($aMousePos[0], $aMousePos[1]) получит цвет пиксела под реальным курсором. Попробуй добавить к координатам по 1 или больше (см. п. 1), чтобы получить цвет именно нужного пиксела.


Время: 12:09.

Время: 12:09.
© OSzone.net 2001-