Программа для нажатия клавиш

Теория и практика Diablo 3, техническая информация и ПО
  • 2

Сообщение DmitryOlenin » 29 июн 2015, 11:06

Сделал очистку триггеров по двойному щелчку правой клавишей мыши на свободном участке поля программы.

Уже довольно долго пытаюсь сделать распознавание активного скилла.
В общем-то, даже сделал. Есть одна проблема: всё невероятно медленно работает.
Другими словами, на практике это невозможно использовать.

Проблема в том, что надо постоянно сканировать экран на наличие скилла в откате, и, если он откатился, прожимать его. Для этого используется копирование экрана при помощи copyfromscreen.
И этот самый метод работает невероятно долго, что вызывает неприемлемые тормоза.

Если кто-нибудь подкинет идею, как это можно сделать иначе, буду признателен.

P.S.
P/Invoke метод BitBlt не предлагать. Он работает совершенно так же.
Собственно, copyfromscreen превращается в BitBlt при компиляции, как я понял.
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

Сообщение Kadadji » 29 июн 2015, 13:25

DmitryOlenin писал(а):Сделал очистку триггеров по двойному щелчку правой клавишей мыши на свободном участке поля программы.

Уже довольно долго пытаюсь сделать распознавание активного скилла.
В общем-то, даже сделал. Есть одна проблема: всё невероятно медленно работает.
Другими словами, на практике это невозможно использовать.

Проблема в том, что надо постоянно сканировать экран на наличие скилла в откате, и, если он откатился, прожимать его. Для этого используется копирование экрана при помощи copyfromscreen.
И этот самый метод работает невероятно долго, что вызывает неприемлемые тормоза.

Если кто-нибудь подкинет идею, как это можно сделать иначе, буду признателен.

P.S.
P/Invoke метод BitBlt не предлагать. Он работает совершенно так же.
Собственно, copyfromscreen превращается в BitBlt при компиляции, как я понял.

а какая частота запроса? какого размера область захватываешь?
Мне кажется этот момент можно оптимизировать.
Легендарный AZAZAZA.
Аватара пользователя
Kadadji
В первых рядах Танец с пушками Семь раз отмерь, один раз стеклопушка Девять с половиной стеклопушек Восьмое чудо Санктуария
Сообщения: 1703
Репутация: 143
Статус: Не в сети

  • 1

Сообщение DmitryOlenin » 29 июн 2015, 13:48

Частота запроса - максимально возможная из доступных.
У меня стоит тик таймера в 1мс. Можно и реже, конечно, но чем чаще проверяем, тем быстрее можно среагировать на откатившийся скилл.

Область захвата... Тут тоже проблема.
Разницы принципиальной в захвате всего экрана и захвате 1 пикселя (вот натурально, сравнивал) нет.
Она есть, если картинка статична. Если захватываем 1 пиксель при неподвижной картинке - всё получается быстрее, чем, например, 1920x1080. Но даже в этом случае, тормоза будут заметны.
Но если картинка движется (проверял, просто водя окошком в винде), то разницы нет вообще.

Причём, речь идёт только о захвате. Вообще без обработки, без поиска цвета пикселя и так далее.

Кусок кода
//Проверял стопвотчем, 1000 запусков с 1 пикселем, 1000 запусков всего экрана. И так несколько раз.
Код: Выделить всё
            //Rectangle r = new Rectangle(0, 0, 1, 1);
            Rectangle r = Screen.PrimaryScreen.Bounds;
            Bitmap b = new Bitmap(r.Right, r.Bottom);
            using (Graphics g = Graphics.FromImage(b))
            {
                g.CopyFromScreen(0, 0, 0, 0, b.Size);
            }
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

  • 2

Сообщение DmitryOlenin » 05 июл 2015, 13:45

Всё получилось. Сделал прожатие скиллов по кулдауну.
Сейчас тестирую, версию выложу скоро.

Прожатие по откату работает при соотношении экрана 16:9 и 16:10.
Другие не стал делать, как я понимаю, широкоформатные мониторы - это стандарт.

Режим, правда, относительно требовательный к ресурсам компьютера.
Процессорная загрузка от 4 до 8 процентов, память занимается от 50 до 200 мегабайт.
Впрочем, в сравнении с самой игрой, это не заметно, просадки FPS у меня нет на древнем компе.
Функция новая, буду ждать отзывов от первых пользователей :)
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

Сообщение DimonamoN » 05 июл 2015, 14:02

DmitryOlenin, то чувство, когда игра играет за тебя)
Аватара пользователя
DimonamoN
Меценат III-го уровня В первых рядах В центре внимания (I-го уровня) Работал над Книгой Тираэля Засветился на главной Одиннадцать друзей стеклопушки
Сообщения: 30682
Откуда: Мариуполь
Репутация: 23602
Статус: Не в сети

  • 3

Сообщение DmitryOlenin » 05 июл 2015, 14:09

Сделал под конец сезона креста. Пока саппорчу, ибо вещей нет.
Управляю чисто одной рукой, клавиатура отдыхает :)

Пот откату прожимаются: Принцип доблести, Порицание, Железная кожа.
Очень удобно, всем советую :)

DimonamoN, ты, я помню, хотел воспользоваться программой после мифической "волны банов". Передумал? Или саппортами решил не играть?
К слову, я даже у мага в Дельсире купола по откату ставлю. Экономит мои нервы и ресурс мыши ;)
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

Сообщение DimonamoN » 05 июл 2015, 14:18

DmitryOlenin, саппортами не играю, тезка. Для барба и охотницы хватает и своих био-манипуляторов :)
Как бы то ни было, огромный респект тебе, программа почти не имеет аналогов, проста в освоении и очень полезна для определенных задач :thumbup:
Аватара пользователя
DimonamoN
Меценат III-го уровня В первых рядах В центре внимания (I-го уровня) Работал над Книгой Тираэля Засветился на главной Одиннадцать друзей стеклопушки
Сообщения: 30682
Откуда: Мариуполь
Репутация: 23602
Статус: Не в сети

  • 4

Сообщение DmitryOlenin » 08 июл 2015, 17:41

Убрал всяческую загрузку процессора (теперь 0%) и потребление памяти (~24Мб) при прожатии скиллов по откату. Довожу до совершенства 8-)

Да, к слову, играю крестоносцем-саппортом так:
1. Поводил мышкой с зажатой левой клавишей.
2. Иногда прожал на мышке коня и поводил мышкой.
3. Зажал Shift.
4. Повторить, начиная с пункта 1.

Красота неописуемая. Вместо прожатия 6 клавиш, нажимать одну и Shift :)
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

  • 1

Сообщение LamerOnline » 12 июл 2015, 04:40

DmitryOlenin писал(а):Всё получилось. Сделал прожатие скиллов по кулдауну.
ну так чем дело кончилось как решил проблему с copyfromscreen

LamerOnline
Три года пушек на стекле Четыре года на стекле
Сообщения: 14
Репутация: 36
Статус: Не в сети

  • 2

Сообщение DmitryOlenin » 12 июл 2015, 22:19

Сделал всё-таки через BitBlt.
Видимо, изначально где-то накосячил с new и dispose, потому были бешеные лаги.
Сейчас всё идеально.

Сейчас решаю ещё одну проблему. Некоторые скиллы типа Сияющего щита требуют время на каст.
То есть как-то надо ждать после их прокаста что ли...
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

Сообщение fatum312 » 13 июл 2015, 23:10

Что-то в 10-ке перестало работать Зажатие :(
Аватара пользователя
fatum312
Одиннадцать друзей стеклопушки
Сообщения: 513
Репутация: 425
Статус: Не в сети

  • 2

Сообщение DmitryOlenin » 14 июл 2015, 09:48

Спасибо, что напомнили. Поправил ошибку по ходу дела, в следующей версии всё будет. :)

Но, в целом, на Win10 всё прожимается нормально.
Там старая проблема, пока не выставишь время, прожим не идёт.
Поставьте хоть что-то, до того, как ставить галку на зажатие, и всё будет хорошо.

Раз уж у меня оказалась Win10, решил потестировать.
Картинка
Изображение
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

Сообщение LamerOnline » 14 июл 2015, 12:19

DmitryOlenin писал(а):Сделал всё-таки через BitBlt.
тогда почему copyfromscreen тормозил? и с ним должен был сделать тогда

LamerOnline
Три года пушек на стекле Четыре года на стекле
Сообщения: 14
Репутация: 36
Статус: Не в сети

  • 1

Сообщение DmitryOlenin » 14 июл 2015, 15:17

Copyfromscreen работает медленнее, чем BitBlt.
Причём медленнее, в моём случае, примерно в 75 раз.

Я копирую узкую полоску экрана. BitBlt так умеет, с Copyfromscreen мне приходилось изгаляться и резать картинку (что, кстати, всё равно было быстрее, чем работать со всей сразу).
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

Сообщение DreXLer » 29 июл 2015, 14:57

Оличная программа! Автору огромное спасибо! :thumbup: Но я пока не разобрался с функцией - клавиша с паузой... Опишите плз подробнее как это работает?
Я хочу чтобы на монке прожималось умение "Прозрение (озарение)" и только после 15 сек его действия прожималось "Таинственный союзник (воздушный)", а так же каждые 2.8 сек мантра. Т.е. смысл в том чтобы скилы восстанавливающие дух не прожимались одновременно, т.к. нам столько духа не нужно. Как это реализовать?

DreXLer
Три года пушек на стекле Четыре года на стекле
Сообщения: 1
Репутация: 0
Статус: Не в сети

  • 1

Сообщение lordep » 29 июл 2015, 15:43

Заблокируйте, пожалуйста кнопки Save/Load когда нажата Start. Так как можно загрузить профиль (визуально клавиши поменяются) но он не будет активен пока не нажать Stop а затем снова Start.
Аватара пользователя
lordep
Юбилейная стеклопушка В центре внимания (II-го уровня)
Сообщения: 3238
Откуда: Киев
Репутация: 5224
Статус: Не в сети

  • 3

Сообщение DmitryOlenin » 29 июл 2015, 19:19

lordep
Сам не пользуюсь Save/Load, так что спасибо за отзыв, не узнал бы иначе никогда.
Сделаю, не вопрос.

DreXLer
Клавишу с паузой я описывал ранее на страницах темы, когда только её придумывал.
Смысл такой: есть клавиша, по нажатию которой всё должно прерываться, чтобы ей не мешать.
Пример: Скакун у крестоносца. Пока он активен, все остальные прожатия прекращаются, чтобы не прервать этого самого коня.

Теперь по вопросу. Мантру как прожимать каждые 2.8 секунд понятно, да?
Прозрение прожимаем. Предположим, оно откатывается каждые 45 секунд, при этом работает 15 секунд. Ставим 45 секунд.
Союзник ставим прожиматься каждые 30 секунд.

Более элегантного решения я пока не вижу, к сожалению.
В новой версии можно будет ставить прожатие скиллов по откату, но даже в этом случае я пока не очень понимаю, как сделать зависимость одного скилла от другого.
Программа для автоматического нажатия клавиш Diablo 3 Hotkeys
Школьники ушли в школы, больше за 10 минут никто калькуляторы не пишет...
Программа для расчёта DPS - Diablo 3
Аватара пользователя
DmitryOlenin
В первых рядах В центре внимания (II-го уровня) Юбилейная стеклопушка
Сообщения: 1622
Откуда: Москва
Репутация: 1208
Статус: Не в сети

Сообщение DimonamoN » 01 авг 2015, 11:15

DmitryOlenin, привет :)

Объясни :slow:
- можно ли запускать прогу, когда уже игра запущена?
- как поставить активные скиллы монку на клавишах 1,2,3 (дыхание, схлопывание, союзник) по откату (КДР)?
- где скачать новую версию (актуальную проги)?

UPD скачал и запустил - погнали лечиться)
Аватара пользователя
DimonamoN
Меценат III-го уровня В первых рядах В центре внимания (I-го уровня) Работал над Книгой Тираэля Засветился на главной Одиннадцать друзей стеклопушки
Сообщения: 30682
Откуда: Мариуполь
Репутация: 23602
Статус: Не в сети

Сообщение DimonamoN » 01 авг 2015, 14:40

DmitryOlenin, спасибо за прогу, тезка. Сделали ачиву на лечение монком. Даже с прогой, это заняло порядка 4 часов (сколько делали бы вручную - не хочется и прикидывать))
Аватара пользователя
DimonamoN
Меценат III-го уровня В первых рядах В центре внимания (I-го уровня) Работал над Книгой Тираэля Засветился на главной Одиннадцать друзей стеклопушки
Сообщения: 30682
Откуда: Мариуполь
Репутация: 23602
Статус: Не в сети

Сообщение DeaDHeaD » 01 авг 2015, 14:49

DmitryOlenin писал(а):Спасибо, что напомнили. Поправил ошибку по ходу дела, в следующей версии всё будет. :)

И когда же она будет? Полмесяца прошло,а воз и ныне там. Как не пахало прожатие на Win10, так и не пашет.
BorN †o be DeaD
Аватара пользователя
DeaDHeaD
В первых рядах Юбилейная стеклопушка
Сообщения: 23
Репутация: 6
Статус: Не в сети

  • 0

Сообщение fatum312 » 02 авг 2015, 11:26

DeaDHeaD, чукча не читатель, чукча писатель. :grumpy:

DmitryOlenin писал(а):Там старая проблема, пока не выставишь время, прожим не идёт.
Поставьте хоть что-то, до того, как ставить галку на зажатие, и всё будет хорошо.
Картинка
Изображение
Аватара пользователя
fatum312
Одиннадцать друзей стеклопушки
Сообщения: 513
Репутация: 425
Статус: Не в сети

Сообщение DeaDHeaD » 02 авг 2015, 18:14

fatum312, ну надо же, мистер умник. Думаешь я действительно не видел слона? А ты в курсе, что менюшки в версиях 2.1 и 2.2 отличаются? В версии, что выложена в данном топике (2.1) НЕТ вообще возможности выставить "галку", какие бы ты значения не вводил.
Скрин
Изображение
BorN †o be DeaD
Аватара пользователя
DeaDHeaD
В первых рядах Юбилейная стеклопушка
Сообщения: 23
Репутация: 6
Статус: Не в сети

  • 1

Сообщение lordep » 02 авг 2015, 18:35

DeaDHeaD, Настройка - Процесс/Зажатие - "галка" поставлена ?
Аватара пользователя
lordep
Юбилейная стеклопушка В центре внимания (II-го уровня)
Сообщения: 3238
Откуда: Киев
Репутация: 5224
Статус: Не в сети

Сообщение fatum312 » 02 авг 2015, 21:53

DeaDHeaD писал(а):fatum312, ну надо же, мистер умник. Думаешь я действительно не видел слона?


Действительно не видишь.
ЧЯДНТ?
Изображение
Изображение


Главное ведь что сделать? Правильно, не разобравшись наехать.

lordep писал(а):DeaDHeaD, Настройка - Процесс/Зажатие - "галка" поставлена ?


О чем ты, там же "НЕТ вообще возможности выставить "галку".
Аватара пользователя
fatum312
Одиннадцать друзей стеклопушки
Сообщения: 513
Репутация: 425
Статус: Не в сети

Сообщение DeaDHeaD » 05 авг 2015, 08:34

lordep писал(а):DeaDHeaD, Настройка - Процесс/Зажатие - "галка" поставлена ?

Да, сделано всё, как на скринах.
fatum312 писал(а):Главное ведь что сделать? Правильно, не разобравшись наехать.

Ой, всё.

P.S.: не пашет конкретно бинд на левую кнопку мыши, другие клавиши работают, не спорю. Но, если раньше программа работала безупречно во всех приложениях, то теперь, даже если указать конкретное, не пашет. Перепробовал все варианты, проще забить до выхода 2.3.0.
BorN †o be DeaD
Аватара пользователя
DeaDHeaD
В первых рядах Юбилейная стеклопушка
Сообщения: 23
Репутация: 6
Статус: Не в сети

Пред.След.

Вернуться в Игровая механика



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4