用C#中的钩子重定向keydown

本文关键字:重定向 keydown | 更新日期: 2023-09-27 18:01:04

我想为游戏编写一个类似热键助手的应用程序,例如,在《魔兽争霸3》中,出于某种原因,我使用了numpad键。是否可以通过按下"X"键向操作系统发送"Numpad 1 key pressed"消息?我一直试着用钩子做这个,但我想不通。我希望我是清白的。

我已经为钩子使用了这个类:NET.中的全局系统钩子

简单地说,我的代码是这样的:

globalKeyboardHook hook = new globalKeyboardHook(); // A Global Hook
private void btnHook_Click(object sender, EventArgs e)
{
    hook.hook(); // Set the hook
    hook.HookedKeys.Add(Keys.X); // Hook the X key
    // i removed other hooks purify the code, six hooks total.
    hook.KeyDown += new KeyEventHandler(hook_KeyDown); // add eventhandler
    Program.hookActive = true; // inform the program that hook is active.
    Guncelle(); // update form components (buttons enabling/disabling according to hook status etc.)
}
private void hook_KeyDown(object sender, KeyEventArgs e)
{
    KeyEventArgs k = new KeyEventArgs(Keys.NoName);
    switch (e.KeyCode)
    {
        case Keys.X:
            k = new KeyEventArgs(Keys.NumPad1);
            OnKeyDown(k);
            break;
            // i removed other cases to purify the code, six cases total.
    }
}

用C#中的钩子重定向keydown

是的,您可以使用WinAPI SendInput()keyb_event()调用。例如:

keybd_event(VK_NUMPAD1, 0, 0, 0)