【发布时间】:2021-12-10 17:50:38
【问题描述】:
我正在尝试用unity3d做一个按键监控功能,但是现在遇到了一些困难。 我第一个版本的方法是通过hook做的,一切正常,直到遇到英雄联盟,在这个游戏的界面上,我的键盘无法hook。主要代码如下:
[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来捕捉,同样不生效。
那么有人知道发生了什么吗?这种想象不仅应该存在于英雄联盟,也应该存在于其他游戏中。我没有时间测试它。如果您有任何想法或建议,我将不胜感激!
【问题讨论】:
-
一些高预算的游戏有反作弊系统。我相信您必须以管理员身份运行程序才能进行按钮监控。
-
是的!天哪,我以为我的代码有问题,我觉得我浪费了很多时间~非常感谢!
-
我已经发布了答案。请接受它,这标志着问题在stackoverflow中已解决。
-
完成,再次感谢!