#c# #unity3d #keyboard #hook
Вопрос:
Я пытаюсь использовать unity3d для выполнения функции мониторинга кнопок, но теперь я столкнулся с некоторыми трудностями. Моя первая версия метода состоит в том, чтобы сделать это с помощью крючка, все в порядке, пока я не столкнусь с League of Legends, в интерфейсе этой игры моя клавиатура не может быть захвачена крючком. Основной код выглядит так:
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelHookProc lpfn, IntPtr hMod, uint dwThreadId); public delegate IntPtr LowLevelHookProc(int nCode, IntPtr wParam, IntPtr lParam); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool UnhookWindowsHookEx(IntPtr hhk);
Затем я использовал компонент ввода DirectX для мониторинга. Аналогично, не было никакого ответа на интерфейсе Лиги Легенд. Кстати, я использую SharpDX.DirectInput. Код, подобный этому:
Keyboard keyboard; void Start() { var directInput = new DirectInput(); keyboard = new Keyboard(directInput); keyboard.Acquire(); } void Update() { KeyboardState cur = keyboard.GetCurrentState(); if (cur.PressedKeys.Count != 0) { Debug.LogError(cur.ToString()); } }
Наконец, я использовал GetAsyncKeyState для захвата, то же самое не вступает в силу.
Так кто-нибудь знает, что происходит? Такого рода воображение должно быть не только в League of Legends, но и в других играх. У меня не было времени проверить это. Если у вас есть какие-либо идеи или предложения, я был бы очень признателен!
Комментарии:
1. Некоторые высокобюджетные игры имеют античит-системы. Я считаю, что вы должны запустить свою программу от имени администратора, чтобы осуществлять мониторинг кнопок.
2. Да! О Боже, я думал, что с моим кодом что-то не так, я думаю, что потратил впустую много времени ~ большое вам спасибо!
3. Я опубликовал ответ. Пожалуйста, примите это, что означает, что проблема решена в stackoverflow.
4. готово, еще раз спасибо!
Ответ №1:
Решил вопрос в разделе комментариев:
Некоторые высокобюджетные игры имеют античит-системы. Вы должны запустить свою программу от имени администратора, чтобы выполнить мониторинг кнопок.
Комментарии:
1. Да, и еще одна вещь, если вы можете настроить запуск своего приложения как администратора, а не вручную, это было бы полезно для удобства пользователя.
2. AFAIK для этого в Unity нет встроенных решений. Вы должны попытаться запустить что-то, требующее прав администратора, ОС (Windows, я полагаю) предложит вам автоматически. Существуют способы заставить его всегда получать права администратора при запуске, вручную настроив манифест программы .NET. Однако это совершенно другой вопрос. Вы можете сделать еще один пост или просто провести некоторое исследование в Интернете. Люди уже спрашивали об этом раньше.