Переадресация клавиш в C #? - PullRequest
2 голосов
/ 01 июля 2011

Я хочу написать приложение, например, помощники горячих клавиш для игр, например, в Warcraft 3, я почему-то использую цифровые клавиши.Можно ли отправить в ОС сообщение «Нажата клавиша Numpad 1» нажатием клавиши «X»?Я пытался сделать это, используя крючки, но я не мог понять.Я надеюсь, что все ясно.

Я использовал этот класс для хуков: Глобальные системные хуки в .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.
    }
}

1 Ответ

2 голосов
/ 01 июля 2011

Да, вы можете использовать вызовы WinAPI SendInput() или keyb_event().Например:

keybd_event(VK_NUMPAD1, 0, 0, 0)
...