Как вы отправляете клавиши NumPad с помощью SendKeys?
Я хочу отправить нажатие клавиш цифровой клавиатуры (1-9).
Я попытался использовать:
SendKeys.SendWait("{NUMPAD1}");
Но там написано
Система.ArgumentException: ключевое слово NUMPAD1 недопустимо (переведено)
Поэтому я не знаю правильного кода ключа для цифровой клавиатуры.
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-кодов, поэтому, возможно,поэтому они их оставили.