【问题标题】:Redirecting keydown by hook in C#?在C#中通过钩子重定向keydown?
【发布时间】:2011-07-01 08:23:43
【问题描述】:

我想为游戏编写一个像热键助手这样的应用程序,例如,在魔兽争霸 3 中,我出于某种原因使用数字键盘键。是否可以通过按“X”键向操作系统发送“Numpad 1 keypressed”消息?我一直在尝试使用钩子来做到这一点,但我无法弄清楚。我希望我是清楚的。

我已将此类用于钩子:Global System Hooks in .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# .net hook keypress


    【解决方案1】:

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

    keybd_event(VK_NUMPAD1, 0, 0, 0)
    

    【讨论】:

    • 感谢您的回答,现在产生了两个不同的问题。它适用于记事本等应用程序,但不适用于类似魔兽的大型游戏。第二个问题是,每当我按一次“X”键时,numpad1 键会模拟 4 次。
    猜你喜欢
    • 2021-11-08
    • 2019-06-17
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多