Игры Невидимый курсор в windows

daymonday

Зарегистрированный
Сообщения
2
Реакции
0
Здравствуйте.
Думаю беседка пожалуй единственное место где я могу задать свой говновопрос дабы не, извините, гадить на форуме. И ещё я засунул косвенно относящиеся к вопросу материалы под спойлер, возможно это как-то пригодится.

Суть проблемы
При подключении к удалённому пк (хост) с помощью Parsec эмулируется клавиатура и мышь. К сожалению некоторые игровые античиты (например vanguard) блокируют эмуляцию переферии и принимают только raw ввод. На данный момент они не блокируют проброс usb портов, поэтому я поднял vlan через softether и с помощью тулзы usb over network пробросил свою клавиатуру и мышь на хост, что дало мне возможность обойти ограничения античитов. При подключении таким образом возникает проблема с курсором мыши - он пропадает/становится невидимым на хосте, что, согласитесь, проблематично. Обновление драйверов или установка фирменного по мыши не меняют ситуации.

Зачем нужен удалённый пк, parsec...?
Разумеется обычному человеку не придёт в голову заниматься подобной ерундой, если не сказать иначе. Дело в том, что у меня в квартире/доме есть проблема с инпут лагом из-за чего играть в шутеры не представляется возможным и единственный известный на данный момент вариант полностью избавиться от проблемы - переезд в другую квартиру/дом. Речь не об input lag, что переводится также как и пишется, проблема гораздо сложнее и комплекснее, при этом почему-то в комьюнити её прозвали именно так, но я не хотел бы углубляться в этот вопрос. Просто поверьте на слово, что играть в шутеры с данной проблемой невозможно. А при определённых условиях - вообще пользоваться пк.

В случае c удалённым пк и Parsec я экспериментирую с поиском решения проблемы. Ранее вариантом играть удалённо был только облачный гейминг, который предоставляет 60Hz или в лучшем случае 120Hz потоковый стриминг. Всё это подходит для игроков, которые не играют в шутеры, потому что им не важна частота обновления экрана (хотя мне противно даже на рабочем столе видеть менее 144Hz). Для игры в шутеры это не годится.

Про Parsec я знал ещё в 20 году, но на тот момент они ещё не идеально допилили свой софт, поэтому я просто иногда читал их анонсы. И вот спустя время стриминг с высоким битрейтом около 70мбит/с в 1080p@240Hz работает шедеврально, по моим замерам задержки существенно сократились и теперь их можно снизить до ~10мс! Конечно при наличии видеокарты 20/30 серии и пинга до хоста ~5мс, что в моём случае вполне реально и осуществимо, благо рядом есть отличные дц. На данный момент я проверил несколько игр и всё работает отлично. Для этого я арендовывал выделенный сервер с видеокартой в стойке. Тестировать конечно было жутко неудобно, но об этом ниже

Что было предпринято
Поскольку античиты блокируют эмуляцию, они легко могут заблокировать любые варианты отрисовки курсора мыши программно, особенно если речь идёт о полноэкранном приложении directx. Поэтому самый простой и безопасный вариант обнаружить курсор нашёл только один - использовать встроенную функцию windows mouse sonar. Разумеется сама реализация выглядит куцо, а использовать предлагаемую кнопку CTRL для активации этой функции попутно находясь в игре крайне неудобно. Пытаясь найти варианты замены отображения эффекта или смены кнопки активации нашёл только расположение в реестре данной функции. Дальнейшие поиски по ключевым названиям ничего не дали.
Из готовых программ нашёл SpotOnTheMouse которая отрисовывает облась под курсором и имеет настройки биндов, но после тестов выяснил, что с несколькими играми программа не работает. Как на неё реагируют античиты информация пока не полная, нужно больше тестов.
Также я пробовал отрисовать курсор самостоятельно. Хоть попытки куцые и недопиленные, они более-менее работают в окне без рамок, например простейшая реализация на python и c++:
Python:
import win32gui, win32ui
from win32api import GetSystemMetrics

dc = win32gui.GetDC(0)
dcObj = win32ui.CreateDCFromHandle(dc)
hwnd = win32gui.WindowFromPoint((0,0))
monitor = (0, 0, GetSystemMetrics(0), GetSystemMetrics(1))

while True:
    m = win32gui.GetCursorPos()
    dcObj.Rectangle((m[0], m[1], m[0]+10, m[1]+10))
    win32gui.InvalidateRect(hwnd, monitor, True)
C++:
int main()
    {
    POINT p;
    while (true)
    {
        if (GetCursorPos(&p))
        {
            HDC dc = GetDC(GetDesktopWindow());

            TextOutA(dc, p.x, p.y, ".", 1);
            ReleaseDC(GetDesktopWindow(), dc);
        }
    }
}

По итогу хотелось бы знать существует ли вариант поставить свою кнопку/комбинацию активации функции сонара? Или вообще видоизменить эффект функции? Всё же реализация средствами windows самая безопасная как мне кажется, но я даже не знаю с чего начать. Или может быть есть какой-то другой простой и безопасный способ избавиться от проблемы с исчезающим курсором?
 

Gideon Vi

Ветеран
Мудрец
Сообщения
105
Реакции
533
пока что мне просто интересно... есть средства снимать выделенный с игровой картой, вероятно есть возможность собрать такой дома?
Значит проблема не в железе, а в провайдере. Есть хостинг, пинг через который устраивает даже с применением прослойки
Так почему не поднять на хостинге впн и играть в нейтив режиме?
 

f13nd

Постоянный
Мудрец
Сообщения
76
Реакции
362
и с помощью тулзы usb over network пробросил свою клавиатуру и мышь на хост, что дало мне возможность обойти ограничения античитов
Это странно, потому что данная тулза толком не умеет маскироваться: зарегистрированные ею устройства не являются дочерними 'USB\ROOT_HUB' (или 'USB3\ROOT_HUB' или 'AMDUSB30\ROOT_HUB30' и прочего), вроде в 'SYSTEM/' регистриует. Это легко выкупается. Virtualhere умеет прятаться лучше (хотя тоже не идеально). Возможно причина глюков с курсором как раз связана с кривой эмуляцией.
 
Последнее редактирование:

daymonday

Зарегистрированный
Сообщения
2
Реакции
0
@Gideon Vi, У меня собран такой дома, даже можно сказать два. Один - мощный хост, планирую отвезти в дц и арендовать под него нужное кол-во юнитов, второй, послабее, как клиент будет коннектиться к хосту из дома. Я аредовывал виртаульные, смотрел через looking glass - пинг везде в среднем 5мс до дц который мне нужен. Вместе с кодированием/декодированием потока выходит как раз около 10мс.
Проблем с провайдером нет. Я не хочу углубляться в природу этой проблемы, поскольку до сих пор не найдена причина. Есть предположения, достаточно много, как и людей которые столкнулись с этим и предпринимают попытки разобраться. Я тоже убил на это много времени, денег и сил (и продолжаю это делать). Но сейчас, возможно, появилась реальная альтернатива переезду, поэтому хочу хотя бы попытаться разробраться в этом вопросе. Потенциально это поможет не только мне, как минимум я хочу в это верить.

@f13nd, Да их достаточно много по схожему функционалу, есть даже такие как например flexihub, которому вообще локалка не нужна и он сам всё делает. До кучи можно какой-нибудь Digi AnywhereUSB докупить под этот дело или через microtek попробовать бахнуть. Вы смотрите именно со стороны приватности и надёжности, но штука в том что по моим текущим тестам особой разницы между ними нет. Во всяком случае не видел ни одного упоминания о блокировке за эти программы, но разумеется всё возможно :]
 

f13nd

Постоянный
Мудрец
Сообщения
76
Реакции
362
Вы смотрите именно со стороны приватности и надёжности, но штука в том что по моим текущим тестам особой разницы между ними нет
Еще б разницы с физической клавомышью не было, тогда бы и курсор наверное не пропадал.
 
Верх Низ