Предотвратить сообщения клавиатуры от приложения - PullRequest
0 голосов
/ 09 февраля 2012

Я работаю над приложением, которое автоматизирует Excel через com.Проблема, с которой я сталкиваюсь, заключается в том, что иногда, когда пользователь нажимает некоторые кнопки клавиатуры, Excel крадет фокус и переходит в состояние «Редактирование ячейки», что приводит к сбою приложения.Что может быть лучшим способом предотвратить попадание сообщений клавиатуры в Excel.Я безуспешно пытался подключить CBT и GetMessage.Есть ли другие способы?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2012

Объект приложения Excel 2010 имеет свойство Interactive. Установите значение false, и Excel заблокирует все ввод с клавиатуры и мыши, за исключением любых отображаемых диалоговых окон.

Application.Interactive = False

Я не уверен, когда был добавлен Interactive, но я не думаю, что он существовал в Excel 2000.

0 голосов
/ 09 февраля 2012

Возможно, самый простой способ - использовать BlockInput () , который блокирует ввод данных с помощью мыши и клавиатуры по всему рабочему столу: это полезно, если вы хотите заблокировать пользователя только на короткий период времени .

В качестве альтернативы, если вы просто хотите заблокировать ввод от достижения определенного exe-файла, используйте SetWindowsHookEx (WH_KEYBOARD_LL, ...) - для MSDN вы можете вернуть -1 из hookproc, чтобы заставить быть проигнорированным:

Если nCode больше или равно нулю, [...] Если процедура подключения обработала сообщение, она может вернуть ненулевое значение, чтобы система не могла передать сообщение остальной части цепи подключения или процедуре целевого окна.

Одна приятная особенность хуков WH_KEYBOARD_LL в том, что им не требуется отдельная DLL, вы можете делать все в своем собственном EXE. Но используйте его только против идентификатора потока приложения Excel; если у вас есть HWND приложения, используйте GetWindowThreadID (), чтобы получить это.

...