Существует ли собственный метод .NET или эквивалентный пользователю32.dll GetKeyboardState? - PullRequest
2 голосов
/ 05 июля 2010

ОТВЕТ: Для этого метода нет эквивалента, управляемого собственными силами. Однако хороший пример API управляемого кода можно найти по адресу pinvoke.net .

Привет всем

У меня есть приложение, которое принимает флаг для «режима трассировки». Режим трассировки включает форму, содержащую текстовое поле. Текстовое поле отображает вывод через пользовательский объект TraceListener. Если в командной строке присутствует -t, окно трассировки будет открыто из его собственного потока с низким приоритетом. Это удобно для консультантов, которые пытаются диагностировать приложение, когда что-то идет не так.

Несколько консультантов просили, чтобы при нажатии какой-то непонятной комбинации клавиш во время запуска включался режим трассировки, чтобы им не приходилось каждый раз заходить в командную строку, чтобы активировать ее. Это разумный запрос.

Я не хочу давать им кнопку или пункт меню для этого, потому что много критической информации, которая будет заботиться о консультантах, отображается в Trace при запуске до создания основной формы, когда создаются различные компоненты и инициализируется.

Я думал, что это должно быть достаточно просто, чтобы определить текущее состояние клавиатуры в .NET - но, похоже, везде, где я смотрю, совет должен использовать [DllImport ("user32.dll", EntryPoint = "GetKeyboardState", SetLastError = true)] как метод обнаружения происходящего.

Это все хорошо, мне это удобно. Однако, как правило, я стараюсь убедиться, что я использую собственный .NET-управляемый код для функций Windows, прежде чем пытаться свернуть свои собственные.

Есть ли собственный метод .NET или эквивалентный пользователю3232.dll GetKeyboardState?

Ответы [ 2 ]

1 голос
/ 05 июля 2010

Control.ModiferKeys является статическим свойством Control, которое, если оно есть, нажимает клавиши-модификаторы.Я ничего не знаю, чтобы получить общее состояние клавиатуры, похоже, что большинство кодов P / Invoke с GetKeyboardState или GetKeyState для проверки определенных клавиш.

0 голосов
/ 05 июля 2010

Вы уверены, что PreviewKeyDownEventArgs не имеет того, что вам нужно?Если это так, то вы можете использовать событие PreviewKeyDown.

Другим вариантом могут быть клавиши ускорения.Функция Windows API может использовать таблицу ускорений в ресурсах приложения для сопоставления последовательностей клавиатуры с командами, где команда - это то же самое, что и элемент меню;Вы знаете, сообщение WM_COMMAND.Я знаю, что это легко сделать в MFC с использованием C ++, но когда я попытался найти способ C # сделать это, я заблудился.Если вы можете понять, как делать клавиши ускорения, используя C #, тогда это может быть гибким решением.

...