Key Hook не определяет 4 кнопки сразу

197
03 августа 2018, 14:30

Хочу выводить нажатые клавиши пользователем, в том числе сочетания. Пробовал разные Key Lisener/Hook (они работают по одному и тому же принципу), но везде одна и та же проблема - у меня получается нажать 4 клавиши одновременно: A + S + D + F, но вот никак не получается нажать G + H + V или все 4 стрелочки.

Хотелось бы поддерживать 5 одновременных нажатий.

Использую этот гист: https://gist.github.com/Ciantic/471698

Код формы:

public partial class KeyDisplayerForm : Window
{
    private KeyboardListener KListener;
    private List<string> keys;
    public KeyDisplayerForm()
    {
        InitializeComponent();
        KListener = new KeyboardListener();
        KListener.KeyDown += new RawKeyEventHandler(KListener_KeyDown);
        KListener.KeyUp += new RawKeyEventHandler(KListener_KeyUp);
        keys = new List<string>();
    }
    private void KListener_KeyUp(object sender, RawKeyEventArgs e)
    {
        keys.RemoveAll(x => x == e.Key.ToString());
        Show();
    }
    private void KListener_KeyDown(object sender, RawKeyEventArgs e)
    {
        if (!keys.Exists(x => x == e.Key.ToString()))
        {
            keys.Add(e.Key.ToString());
            Show();
        }
    }
    private void Show()
    {
        label.Content = "";
        foreach (var key in keys)
        {
            label.Content += $"{key} + "; 
        }
    }
    private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        KListener.Dispose();
    }
}

Разметка формы:

<Window x:Class="YAKD.KeyDisplayerForm"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:YAKD"
        mc:Ignorable="d"
        Title="KeyDisplayerForm"
        Height="200" Width="500"
        Closing="Window_Closing">
    <Grid>
        <Label x:Name="label" Content="" HorizontalAlignment="Left" Margin="10" VerticalAlignment="Top"/>
    </Grid>
</Window>
Answer 1

Это аппаратная проблема. Зависит исключительно от разводки проводящих дорожек для клавиш и, иногда, от контроллера.

Обычно можно отловить одновременное нажатие стандартных "геймерских" клавиш, и то не на всех моделях. На бюджетных пленочных - 2-3 клавиши потолок, и то не любые, как повезет. На более дорогих моделях и старых механических может быть больше, иногда существенно.

READ ALSO
Обойти дерево в глубину

Обойти дерево в глубину

Есть такой набор данных:

207
Excel выбор листа при импорте laravel

Excel выбор листа при импорте laravel

Как сделал выборку листов при импорте из Excel файла в бд laravelНа данный момент мой импорт:

197
Doctrine не подтягивать все связи

Doctrine не подтягивать все связи

Например, когда я пишу так: $users = $this->getDoctrine()->getRepository('ProfileBundle:User')->findBy(['deletedAt' => null]); то к модели пользователя подтягиваются все связанные...

153
Генерация картинки с помощью php [дубликат]

Генерация картинки с помощью php [дубликат]

На данный вопрос уже ответили:

192