我目前使用Steelseries GameSense SDK为我的键盘和鼠标制作自己的效果等。
为了在点击和按下时点亮我的鼠标和键盘,我使用了globalmousekeyhook库。
不幸的是,鼠标和键盘事件不会被触发。
此外,我的鼠标开始滞后,键盘输入被延迟。
滞后和延迟只持续了大约半分钟。
我怀疑windows删除挂钩是因为它检测到了滞后。
我也尝试了这个示例程序,在那里一切都很好。
这是代码:
private static readonly IKeyboardMouseEvents GlobalHook = Hook.GlobalEvents();
static InputManager()
{
Logger.Log("Starting...", Logger.Type.Info);
GlobalHook.KeyDown += KeyEvent;
GlobalHook.MouseDownExt += MouseEvent;
Logger.Log("Ready!", Logger.Type.Info);
}
事件功能:
private static void KeyEvent(object sender, KeyEventArgs eventArgs)
{
Logger.Log(eventArgs.KeyCode.ToString());
}
private static void MouseEvent(object sender, MouseEventArgs eventArgs)
{
Logger.Log(eventArgs.Button.ToString());
}
你可以在这里找到整个课程(和项目(。
构造函数是程序中唯一可以执行的东西。
关于滞后,我发现事件函数必须很快。在我的情况下,这不会是问题所在,因为Logger.Log()
函数很快,而且在使用Console.WriteLine()
时也会出现滞后。
正如我所说,示例程序运行良好。我试着复制示例代码,但没有什么区别。我的程序和示例程序之间唯一真正的区别是示例使用.Net Core,但我使用.Net Framework(4.8(。这可能是原因吗?如果是这样的话,有什么方法可以将该库与.Net Framework一起使用吗?我期待任何帮助。
有两个问题:
- 您需要一个消息泵来接收挂钩消息。为此,您可以使用以下代码,如您链接的示例所示
Application.Run(new ApplicationContext());
- 您现在在同一个线程上有两件事要做:发送消息和等待输入。相反,将它们拆分为不同的线程:
private static void Main(string[] args)
{
Logger.Log("Program started. Welcome.", Logger.Type.Info);
////GameSense.Controller.Start();
new Thread(() => Console.ReadLine()).Start();
InputManager.Start();
Application.Run(new ApplicationContext());
InputManager.End();
Application.Exit(); // needed to close down the message pump and end the other thread
}