Заставить работать код корректно в приложениях (мышь)

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Hawk, Romeo, Eugie

Ответить
IvaN010
Сообщения: 2
Зарегистрирован: 14 апр 2016, 14:44

14 апр 2016, 14:45

Приветствую всех. На днях образовалась потребность в приложении под win, которое бы ускоряло скорость курсора мыши на большие значения, чем это позволяют сделать стандартные настройки Windows.

Такое приложение было написано одним хорошим пользователем сего форума с ником kylroma, вот код:

Код: Выделить всё

#include <windows.h>
#include <cmath>

int main()
{
POINT cp;
POINT temp;
int speed = 10;
int width = GetSystemMetrics(SM_CXSCREEN);
int high = GetSystemMetrics(SM_CYSCREEN);
GetCursorPos(&cp);
temp.x = cp.x;
temp.y = cp.y;

while(true)
{
GetCursorPos(&cp);
if(cp.x != temp.x) 
{
temp.x = cp.x+speed*((cp.x - temp.x)/fabs(cp.x-temp.x)); 
if(temp.x >= 0 && temp.x<=width)
SetCursorPos(temp.x,temp.y);
}
if(cp.y != temp.y)
{
temp.y = cp.y+speed*((cp.y - temp.y)/fabs(cp.y-temp.y));
if(temp.y >= 0 && temp.y<=high)
SetCursorPos(temp.x,temp.y);
}
}
}
Однако приложение не работает в играх, т.е. просто виндовс пользовать можно, а в любой игре (шутер и тп) мышь не слушается и курсор просто дёргается хаотично.

Суть проблемы: возможно ли каким либо образом заставить данный код работать в играх? Как я понимаю формула ежесекундно что то обсчитывает, возможно ли как то модифицировать код что бы в игре это не превращалось в неуправляемое дёргание курсора? Есть тут грамотные в юзеры, кто хоть что то смыслит в WinApi и способен подсказать решение проблемы? Буду очень благодарен!
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

14 апр 2016, 15:55

Как минимум есть проблема в том, что метрики вычитываются один раз на момент запуска. Если после запуска программы запустить игру, в которой разрешение иное, чем разрешение рабочего стола, то на лицо проблема.

А вообще, решение достаточно кривое. Программа, будучи запущенной, загрузит процессор на 100%, дёргая код, вызывающий пересчёт, тысячи раз в секунду. Более правильным будет использование хуков.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
IvaN010
Сообщения: 2
Зарегистрирован: 14 апр 2016, 14:44

14 апр 2016, 16:11

Romeo писал(а):Как минимум есть проблема в том, что метрики вычитываются один раз на момент запуска. Если после запуска программы запустить игру, в которой разрешение иное, чем разрешение рабочего стола, то на лицо проблема.

А вообще, решение достаточно кривое. Программа, будучи запущенной, загрузит процессор на 100%, дёргая код, вызывающий пересчёт, тысячи раз в секунду. Более правильным будет использование хуков.

Большое спасибо за совет. Разрешение экрана одинаковое, тестировал несколько игр - везде одно и тоже. Думаю проблема в вычислении места положения курсора - код просто не видит его в игре и ломается поэтому, хотя не уверен. Я пробовал указать тупо стандартное разрешение экрана (1600-900), но код все равно не работал.

Я бы и рад сам написать программу для работы, но как я уже упомянул код писал не я, сам я лично не программист к сожалению.
LavetaHal
Сообщения: 0
Зарегистрирован: 30 апр 2017, 00:39

01 май 2017, 18:00

#48438327#2289#12#765
Gorka, a US citizen who was born in Britain and has Hungarian parents, was known for his dire warnings about Islamic terrorism while at Breitbart.
http://google.com/
Though his role at the White House was always nebulous, he emerged as a top spokesman for the Trump administration, frequently appearing on CNN and other networks.
The Washington Examiner first reported Gorka's expected departure.
http://edition.cnn.com/2017/04/30/polit ... index.html
Ответить