Как вы отправляете клавиши NumPad с помощью SendKeys?


Я хочу отправить нажатие клавиш цифровой клавиатуры (1-9).

Я попытался использовать:

SendKeys.SendWait("{NUMPAD1}");

Но там написано

Система.ArgumentException: ключевое слово NUMPAD1 недопустимо (переведено)

Поэтому я не знаю правильного кода ключа для цифровой клавиатуры.

2 3

2 ответа:

Из любопытства я посмотрел на исходный код для SendKeys. Нет ничего, объясняющего, почему коды numpad были исключены. Я бы не рекомендовал это как предпочтительный вариант, но можно добавить недостающие коды в класс, используя отражение:

FieldInfo info = typeof(SendKeys).GetField("keywords",
    BindingFlags.Static | BindingFlags.NonPublic);
Array oldKeys = (Array)info.GetValue(null);
Type elementType = oldKeys.GetType().GetElementType();
Array newKeys = Array.CreateInstance(elementType, oldKeys.Length + 10);
Array.Copy(oldKeys, newKeys, oldKeys.Length);
for (int i = 0; i < 10; i++) {
    var newItem = Activator.CreateInstance(elementType, "NUM" + i, (int)Keys.NumPad0 + i);
    newKeys.SetValue(newItem, oldKeys.Length + i);
}
info.SetValue(null, newKeys);

Теперь я могу использовать eg. SendKeys.Send("{NUM3}"). Однако, похоже, это не работает для отправки alt-кодов, поэтому, возможно,поэтому они их оставили.

Вы должны уметь передавать число так же, как передавать букву. Например:

SendKeys.SendWait("{A}");  //sends the letter 'A'
SendKeys.SendWait("{5}");  //sends the number '5'