【问题标题】:Capture the keyboard in the game?在游戏中捕捉键盘?
【发布时间】: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中已解决。
  • 完成,再次感谢!

标签: c# unity3d keyboard hook


【解决方案1】:

解决了评论区的问题:

一些高预算的游戏有反作弊系统。你必须运行你的 以管理员身份编程,以便进行按钮监控。

【讨论】:

  • 是的,还有一件事是,如果您可以将您的应用设置为以管理员身份启动而不是手动执行,这将对用户体验很有用。
  • AFAIK 在 Unity 中没有为此提供内置解决方案。您应该尝试运行需要管理员权限的东西,操作系统(我假设是 Windows)会自动提示您。有一些方法可以通过手动配置 .NET 程序的清单来强制它在启动时始终获得管理员权限。然而,这完全是另一个问题。你可以再发一篇文章,或者只是在互联网上做一些研究。人们以前曾问过这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2012-09-30
相关资源
最近更新 更多